我遇到了与zend框架相同验证器的问题。我有两个元素(密码和验证密码),并希望确保它们是相同的。但是相同的验证器对我不起作用。令牌始终不匹配:
class Form_MemberRegisterationForm extends Zend_Form
{
public function init()
{
$password = $this->createElement('password', 'password1');
$password->setLabel('Password:');
$password->setRequired(TRUE);
$password->setAttrib('size', 30);
$password->setErrorMessages(array ("isEmpty" => "Invalid Password!" ));
$this->addElement($password);
//
$confirmPswd = $this->createElement('password',
'confirmPassword');
$confirmPswd->setLabel('Verify password:');
$confirmPswd->setAttrib('size', 30);
$confirmPswd->addValidator('identical', false,
array ('token' => 'password1' ));
$this->addElement($confirmPswd);
我做错了什么?
答案 0 :(得分:4)
您的代码是正确的。
对于earler版本,尝试在覆盖的isValid方法中添加验证器:
public function isValid($data)
{
$this->getElement('passwordConfirm')->addValidator('identical', false,
array('token' => $data['password'])
);
return parent::isValid($data);
}
答案 1 :(得分:1)
代码示例是正确的,但它只有在Zend Framework版本超过1.10.5时才有效,这是在引入该功能时允许您使用token参数引用其他表单元素。
我猜你的ZF版本低于1.10.5?
使用更新版本的ZF意味着您不必担心覆盖isValid方法,并且有助于使代码更易于理解。
这里有一个ZF开发者的解释:
答案 2 :(得分:0)
试试这种方式
//password
$this->addElement('password', 'password', array('label' => 'Password', 'required' => true));
//password_confirm
$this->addElement('password', 'password_confirm', array('label' => 'Password Confirm', 'required' => true));
$this->password_confirm->addValidator('Identical', false, array('token' => 'password'));
P.S。控件在表单isValid控制器中表现良好,因为否则你永远不会显示错误信息! ;)