Zend framework Zend_表单不显示带有调用加法器的错误消息

Zend framework Zend_表单不显示带有调用加法器的错误消息,zend-framework,zend-form,Zend Framework,Zend Form,我正在实现一个updatePasswordAction,它没有显示当前密码无效的错误。我无法使用Zend_Validate类来实现这一点,以便与提供的record->password一起使用,因此我现在只是在控制器操作中进行验证,如果失败,则将错误消息添加到表单元素。这就在我运行$form->isValid之前。无论如何,这是可行的。但是当验证失败时,它不会在元素上显示关于此的错误消息。任何帮助都将不胜感激 仅供参考:当我提交一个空白的当前密码时,它会显示验证 class Admin_Form_

我正在实现一个updatePasswordAction,它没有显示当前密码无效的错误。我无法使用Zend_Validate类来实现这一点,以便与提供的record->password一起使用,因此我现在只是在控制器操作中进行验证,如果失败,则将错误消息添加到表单元素。这就在我运行
$form->isValid
之前。无论如何,这是可行的。但是当验证失败时,它不会在元素上显示关于此的错误消息。任何帮助都将不胜感激

仅供参考:当我提交一个空白的当前密码时,它会显示验证

class Admin_Form_UserPassword extends Katana_Form
{
    public function init()
    {
    $element = $this->createElement('hidden', 'id');
    $this->addElement($element);

    $element = $this->createElement('password','password');
    $element->setLabel('Current Password:');
    $element->setRequired(true);        
    $this->addElement($element);

    $element = $this->createElement('password','new_password');     
    $element->setLabel('New Password:');
    $element->addValidator('StringLength', false, array(6,24));     
    $element->setRequired(true);
    $element->addValidator('NotEmpty');     
    $this->addElement($element);

    $element = $this->createElement('password','new_password_confirm');
    $element->setLabel('Confirm:');
    $element->addValidator('StringLength', false, array(6,24));
    $element->addValidator('IdenticalField', false, array('new_password', 'Confirm Password'));
    $element->setRequired(true);
    $this->addElement($element);

    $this->addElement('submit', 'submit', array('label' => 'Submit'));
}
}


向元素添加错误不会导致表单本身无效

我至少有两种方法可以解决这个问题:

if($currPassword !== $typedPassword){               
    $form->getElement('password')->addError('Current password is incorrect.');
    $form->markAsError();
}

// or

if ($form->isValid($_POST) && 0 == sizeof($form->getMessages()) {
    // form was valid, and no errors were set on elements
}
要澄清的是,当您将错误添加到表单元素时,该元素会附加一个错误,但是Zend_form::isValid只运行验证器并设置适当的错误,它不会检查您是否在特定元素上设置了错误


但是,您可以调用
$form->getMessages()
,以获取附加到表单或其子元素的所有错误消息。如果这是0,并且您已经验证了表单,则表示没有错误。如果您的表单通过了
isValid
,但您在元素中添加了错误,那么它将包含您添加的错误消息。

我这样做的

控制器:

if ($trial->getKind() != 'debt' && $_POST['kind'] == 'debt')
{
    $editForm->getElement('kind')->markAsError();
}

if ($editForm->isValid($_POST)) { ... }
表格:


你说的“不工作”是什么意思?有错误吗?什么都没发生?当我提交无效的currentpassword时,它不会显示错误消息。正如在updatePasswordAction中一样,我应该在运行($form->isValid($\u POST)){
Zend\u form\u Element::addError()
是附加函数,您必须使用
Zend\u form::getErrorMessages()
来检索它们。是否使用
getErrorMessagess()
?不应该让我在isValid之前设置错误,导致表单无效,并自动设置当前密码元素的错误消息。当元素为空时,它会这样做,因此当当前密码不正确时,它应该这样做。当元素为空时,您是否收到mesage
当前密码不正确的消息?
if ($trial->getKind() != 'debt' && $_POST['kind'] == 'debt')
{
    $editForm->getElement('kind')->markAsError();
}

if ($editForm->isValid($_POST)) { ... }
public function isValid($data)
{
    $valid = parent::isValid($data);

    if ($this->getElement('kind')->hasErrors()) {
        $this->getElement('kind')->addError($this->_translate->translate('You can\'t change trial kind to debt.'));
        $valid = false;
    }

    return $valid;
}