我已经为此苦苦挣扎了一个小时,但仍然无法理解出了什么问题。
这是我设置两个字段的方式:
$password = $this->createElement('password', 'password');
$password->setLabel('Password');
$password->setRequired('true');
$password->addValidator(new Zend_Validate_Regex('/^([a-zA-Z0-9]*[0-9]+[a-z]*[A-Z]+[a-zA-Z0-9]*)|([a-zA-Z0-9]*[A-Z]+[a-z]*[0-9]+[a-zA-Z0-9]*)$/'));
$password->setAttrib('size', 25);
$password->setAttrib('length', 150);
$this->addElement($password);
$confirm_password = $this->createElement('password', 'confirm_password');
$confirm_password->setLabel('Confirm');
$confirm_password->setRequired('true');
$confirm_password->setAttrib('size', 25);
$confirm_password->setAttrib('length', 150);
$confirm_password->addValidator('Identical', false, array('token' => 'password'));
//$confirm_password->addValidator(new Zend_Validate_Identical(array('token' => 'password')));
$this->addElement($confirm_password);
我已经尝试了两个验证器(+评论的那个),但没有一个有效。这些声明来自www.wjgilmore.com/blog/entry/validating_identical_passwords_with_the_zend_framework和https://stackoverflow.com/a/3653416/1300454
这两个声明总是返回“两个给定的标记不匹配”,即使我确信这两个字段包含完全相同的字符串。
有什么猜测吗?谢谢!
编辑:感谢XDebug,当Zend_Validate_Identical
'isValid()
函数被调用时,我的$token
等于'密码'而我的$value
等于'P4ssword'(我在confirm_password字段中输入的密码。这是怎么回事?
EDIT2:尝试使用这两种解决方案:emanaton.com/code/php/validateidenticalfield和stackoverflow.com/a/1628611/1300454但它们都不适合我。使用通用 IdenticalField 验证器,它找不到我的“密码”字段,第二个验证器只返回两个字段不匹配,再次使用 XDebug,我发现它仍在寻找将我的密码“P4ssword”与单词匹配我作为字段名称提供的“密码”...