Zend framework Zend Framework:错误不可见/不显示

Zend framework Zend Framework:错误不可见/不显示,zend-framework,zend-form,zend-form-element,Zend Framework,Zend Form,Zend Form Element,我有以下形式的课程: $username = new Zend_Form_Element_Text('username'); $username->setLabel('Username:') ->setRequired(true) ->addValidator('NotEmpty') ->addFilter('StringTrim') ->setAttribs(array('class' => 'textfiel

我有以下形式的课程:

$username = new Zend_Form_Element_Text('username');
$username->setLabel('Username:')
      ->setRequired(true)
      ->addValidator('NotEmpty')
      ->addFilter('StringTrim')
      ->setAttribs(array('class' => 'textfield'));

$submit = $this->createElement('submit', 'mySubmit');
$submit->setLabel('Login')
       ->setAttribs(array('id' => 'btnsubmit', 'class' => 'btn'));

$reset = $this->createElement('reset', 'myReset');
$reset->setLabel('Reset')
      ->setAttribs(array('id' => 'btnreset', 'class' => 'btn'));

$this->addElements(array($username, $submit, $reset));

$this->setElementDecorators(array(
    'ViewHelper',
    'Errors',
    array('Label', array('class' => 'login_label', 'placement'=> 'REPLACE')),
    array('HtmlTag', array('tag'=> 'p')),    
));

 $this->setDecorators(array(
     'FormElements',
     'Form',             
     array('Fieldset', array('legend' => 'Login Info')), 
     array(array('mydiv' => 'HtmlTag'), array('tag' =>'div', 'id' => 'lgrd')),
 ));
以下是动作控制器代码:

$form = new Application_Form_Adminlogin();
$this->view->form = $form;
如果我提交空白用户名字段,则页面上不会显示错误。有人能告诉我我做错了什么以及如何纠正吗


提前感谢

Zend_表单不会自动填充/验证其自身的GET/POST变量

如评论中所述,您应该这样做:

$postData = $this->getRequest()->getPost();
if($form->isValid($postData)) {
  // Do what you need to do when form is valid
} else {
  // Do what you need to do when form is NOT valid
}
$this->view->form = $form; 

当输入不正确的参数后显示表单时,也应显示错误

在帖子中,你正在做
$form->isValid($form->getValues())?如果是,请查看提供的代码,您应该会在每个无效位置看到错误field@adlawson:你确定吗$表单->getValues()在调用
$form->isValid($data)
之前不会返回任何值,其中
$data
通常类似于$
请求->getPost()
。错别字,对吧?不,不是错别字。如果$form->getValues();返回空,则表单中未填充post值。您应该执行
$form->populate($this->getRequest()->getPost())$表单->isValid($form->getValues())。首先填充表单的好处是,如果指定元素筛选器,则在验证之前会对值进行筛选。@adlawson:aah,我明白你的意思了。我们有点过了头,但我想我们在核心问题上是一致的:
$form->getValues()
要求表单实际上有一些值,通常来自
$form->populate($data)
$form->setDefaults($data)
,或者
$form->isValid($data)
。因此,如果他使用了-,可能是错误的-
$form->isValid($form->getValues())
,那么它的计算结果应该是false,并且表单应该包含他的所有错误。对吗?是的,你是对的
isValid()
需要通过您提到的三种方法之一获取数据。但是,在
isValid()
中设置数据的区别在于,不会使用分配给元素的任何过滤器。我将回顾我之前说过的关于必须调用
$form->isValid($form->getValues())
因为在通过
populate()
setDefaults()
设置数据后,您应该能够在没有参数的情况下调用它。就像我上次对这个问题的评论一样,您应该将
$postData
传递到
$form->populate()
根据添加到元素的任何过滤器过滤数据。然后需要调用
$form->isValid($form->getValues())
isValid()自动填充表单,不需要单独调用来填充()