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 に答える