0

我创建了一个 zend 表单,我在其中输入了密码并确认密码。我使用相同的表单来添加和更新/编辑数据库。当我想添加新密码时,我的代码工作正常,但当我想编辑已经存在的密码时,我的代码不起作用。

我的表格:

    $password = new Zend_Form_Element_Password('password');
    $password->setRequired(true)
    ->addFilter('StringTrim')
    ->addFilter('StripTags')
    ->addValidator('NotEmpty', false, array('messages'=>'password cannot be empty'))
    ->addValidator('StringLength', false, array(5, 25, 'messages'=>'password must be 5-30 character'))
    ->setLabel('Password:');
    $this->addElement($password);

    $confirmPassword = new Zend_Form_Element_Password('confirmPassword');
    $confirmPassword->setRequired(true)
    ->addFilter('StringTrim')
    ->addFilter('StripTags')
    ->addValidator('NotEmpty', false, array('messages'=>'password don\'t match'))
    ->addValidator(new School_Validate_PasswordConfirmation())
    ->setLabel('Confirm Password');
    $this->addElement($confirmPassword);

我的 School_Validate_PasswordConfirmation 类:

class School_Validate_PasswordConfirmation extends Zend_Validate_Abstract
{
     const NOT_MATCH = 'notMatch';

     protected $_messageTemplates = array(
     self::NOT_MATCH => 'Password confirmation does not match'
     );

     public function isValid($value, $context = null)
     {
         $value = (string) $value;
         $this->_setValue($value);

         if (is_array($context)) {
            if (isset($context['password'])&& ($value == $context['password']))
            {
                return true;
            }
         } elseif (is_string($context) && ($value == $context)) {
                return true;
           }

         $this->_error(self::NOT_MATCH);
         return false;
     }
}

当我想编辑密码以外的其他字段时,它会给出以下错误消息。但是只有当我第一次输入用户时才会显示此消息。

错误:

password cannot be empty
password don't match

提前致谢。

4

1 回答 1

1

当表单处于编辑模式时,只需从元素中删除验证器。

public function someAction()
{
    $form = new Application_Form_YourForm();

    if ('in edit mode') {
        $form->getElement('password')->clearValidators();
        $form->getElement('confirmPassword')->clearValidators();
    }

    if ($this->getRequest()->isPost()) {
        $valid = $form->isValid($this->getRequest()->getPost());

        if ($valid) {
            // ...
        } else {
            // ...
        }
    }
}

如果您允许某人通过填写这些字段来更改密码,请添加额外的检查以查看在编辑模式下是否在密码字段中输入了任何内容。如果他们填写了密码,则离开验证者,否则将其删除。

希望有帮助。

于 2012-09-21T14:31:51.923 回答