Khi bạn xác nhận dữ liệu trên một mô hình, dữ liệu đã là set()
. Điều này có nghĩa rằng bạn Ví dụ dưới đây kiểm tra trường chúng tôi đang xác thực để đảm bảo rằng trường này giống với một số trường khác được xác định trong các quy tắc xác thực (chẳng hạn như trường xác nhận mật khẩu) (
Quy tắc xác thực này sẽ trông giống như sau:
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.'
)
)
);
Chức năng xác thực của chúng tôi sau đó xem xét dữ liệu của trường được truyền (confirm_password) và so sánh nó với dữ liệu mà chúng tôi đã xác định trong quy tắc (được chuyển đến $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);
}
Đây là ví dụ đơn giản, nhưng bạn có thể làm bất cứ điều gì bạn muốn với $this->data
.
Ví dụ trong bài viết của bạn có thể trông như thế này:
function requireNotEmpty(&$data, $shouldNotBeEmpty) {
return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}
Và quy tắc:
var $validate = array(
'verify_password' => array(
'rule' => array('requireNotEmpty', 'password')
)
);
Cảm ơn lời giải thích :) – Alvaro
Hy vọng nó xóa một số nội dung lên! – jeremyharris
Trong CakePHP 2.4 nó không có vẻ như bạn có thể vượt qua bằng cách tham chiếu đến chức năng, nó dường như không làm việc cho tôi, nhưng sử dụng ví dụ trong tài liệu và thay đổi nó để $ kiểm tra làm việc. – mtpultz