2011-06-24 50 views
0

在我的'成員'模型中,我通過此自定義驗證鍵/函數對比較password是否匹配password_confirmCakePHP僅在提供時驗證

...'password_confirm' => array(
     'compare' => array(
      'rule'  => array('validate_passwords'), 
      'message' => 'The passwords you entered do not match.', 
      'required' => true 
     ), 

     'length' => array(
      'rule'  => array('between', 6, 20), 
      'message' => 'Your password must be between 6 and 20 characters.', 
     ), 

     'empty' => array(
      'rule'  => 'notEmpty', 
      'message' => 'The password field must not be left blank.', 
     ), 
    )... 

功能validate_passwords ...

function validate_passwords($data, $password_field = 'password', $hashed = true) { 
    $password   = $this->data['Member']['password']; 
    $password_confirm = $hashed ? 
      Security::hash($data['password_confirm'], null, true) : 
      $data['password_confirm']; 
    return $password === $password_confirm; 
} 

我有我的網站的許多不同的部分,允許成員的編輯。有些章節允許更改密碼,其他章節只允許成員編輯其生物。

然而,因爲沒有password_confirm場在用戶編輯生物(例如)的形式驗證總是返回比有password_confirm形式存在虛假任何形式,其他。

有沒有來驗證這樣一個有效的方法...

「與password_confirm比較密碼只有當password_confirm$data陣列中是否存在」

我無法找到原來這在任何地方,我希望我不重複現有的問題。

謝謝!

注意:我想確保該字段在表單中存在時不會留空。

+0

使用allowEmpty作爲真確認密碼 –

回答

0

只需修改您的validate_passwords函數如果['password_confirm']字段不存在,則返回true。

如果確實存在,請檢查確認是否爲empty()先(如果是,則返回false)。

最後按照目前的狀況完成剩餘的檢查。

+0

修復該部分,謝謝,但現在我有內置規則的問題,即它檢查密碼長度,即使我沒有提供密碼來更改它。 – Kieran

+0

您可能還必須創建自定義長度檢查功能。 – helloandre