Zend框架相同的验证器不起作用

时间:2011-07-29 07:21:21

标签: zend-framework passwords

我遇到了与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);

我做错了什么?

3 个答案:

答案 0 :(得分:4)

如果您的Zend Framework版本超过1.10.5,

您的代码是正确的

对于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开发者的解释:

http://zfuniversity.com/tag/zend_validate_identical/

答案 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控制器中表现良好,因为否则你永远不会显示错误信息! ;)