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