パスワードを取得し、パスワードを確認するための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
前もって感謝します。