2011-07-29 48 views
3

我有一個Zend框架相同的驗證器的問題。我有兩個元素(密碼和驗證密碼),並確保它們是相同的。但相同的驗證器不適合我。令牌總是不匹配: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); 

我在做什麼錯了?

回答

4

如果您的Zend Framework版本超過1.10.5,那麼您的代碼是正確的

對於早期的版本版本,嘗試在overrided的isValid方法添加驗證:

public function isValid($data) 
{ 
    $this->getElement('passwordConfirm')->addValidator('identical', false, 
     array('token' => $data['password']) 
    ); 
    return parent::isValid($data); 
} 
+0

錯誤消息:沒有提供令牌來匹配 –

+0

對不起。檢查更正的代碼。 – Alex

+0

工作正常。謝謝。 –

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')); 

附:控件以isValid控制器的形式執行,因爲否則,您將永遠不會顯示錯誤消息! ;)

+0

它說:令牌不匹配。 –

1

的代碼示例是正確的,但如果你的Zend Framework的版本是1.10.5過它只會工作,也就是當特徵是介紹它允許您使用token參數引用其他表單元素。

我猜你的ZF版本是在1.10.5下?

使用更新版本的ZF將意味着您不必擔心重寫isValid方法,這將有助於使代碼更易於理解。從這裏ZF的開發者之一

說明:

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