gpt4 book ai didi

zend-framework - Zend_Form 不显示调用 addError 的错误消息

转载 作者:行者123 更新时间:2023-12-04 06:51:50 25 4
gpt4 key购买 nike

我正在实现 updatePasswordAction,它不会显示当前密码无效的错误。我无法使用 Zend_Validate 类来实现它以与提供的记录-> 密码一起使用,所以我现在只是在我的 Controller 操作中验证,如果失败,那么我将错误消息添加到表单元素。这是在我运行 $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'));
}

public function updatePasswordAction()
{
$resourceModel = new Core_Model_Resource_User();
$form = new Admin_Form_UserPassword();
$form->setMethod(Katana_Form::METHOD_POST);
$form->setAction($this->getActionUrl('update-password'));
if($this->getRequest()->isPost()){
$id = $this->getRequest()->getParam('id');
$record = $resourceModel->find($id)->current();
$currPassword = $record->password;
$typedPassword = md5($this->getRequest()->getParam('password'));
if($currPassword !== $typedPassword){
$form->getElement('password')->addError('Current password is incorrect.');
}
if($form->isValid($_POST)){
$data = $form->getValues();
$result = $resourceModel->updatePassword($id, $data['new_password']);
if($result){
$this->redirectSimple('list');
}
}
} else {
$id = $this->getRequest()->getParam('id');
$recordData = array(
'id' => $id
);
$form->populate($recordData);
}
$this->getView()->form = $form;
}

最佳答案

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

我至少使用了两种方法来解决这个问题:

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
}

澄清一下,当您将错误添加到表单 ELEMENT 时,该元素会附加一个错误,但 Zend_Form::isValid 仅运行验证器并设置适当的错误,它不会检查您是否已设置特定元素的错误。

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

关于zend-framework - Zend_Form 不显示调用 addError 的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8977564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com