當您驗證的模型數據,該數據已經是set()
。這意味着你可以在模型的$data
屬性中訪問它,下面的示例檢查我們正在驗證的字段,以確保它與驗證規則中定義的某個其他字段(例如密碼確認字段)相同
驗證規則看起來像這樣:
var $validate = array(
'password' => array(
'minLength' => array(
'rule' => array('minLength', 6),
'message' => 'Your password must be at least 6 characters long.'
),
'notempty' => array(
'rule' => 'notEmpty',
'message' => 'Please fill in the required field.'
)
),
'confirm_password' => array(
'identical' => array(
'rule' => array('identicalFieldValues', 'password'),
'message' => 'Password confirmation does not match password.'
)
)
);
我們的驗證函數然後查看傳遞的字段的數據(confirm_password)並將其與規則中定義的一個(傳遞給$compareFiled
)進行比較。
function identicalFieldValues(&$data, $compareField) {
// $data array is passed using the form field name as the key
// so let's just get the field name to compare
$value = array_values($data);
$comparewithvalue = $value[0];
return ($this->data[$this->name][$compareField] == $comparewithvalue);
}
這是一個簡單的例子,但是你可以做你想要什麼$this->data
。
在您的文章中的例子可能是這個樣子:
function requireNotEmpty(&$data, $shouldNotBeEmpty) {
return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}
和規則:
var $validate = array(
'verify_password' => array(
'rule' => array('requireNotEmpty', 'password')
)
);
感謝您的解釋:) – Alvaro
希望它可以清除一些東西了! – jeremyharris
在CakePHP 2.4中,它看起來並不像你可以通過引用來傳遞函數,它似乎並不適用於我,但使用文檔中的示例並將其更改爲$ check工作。 – mtpultz