Podczas sprawdzania poprawności danych w modelu danych jest już set()
. Oznacza to, że można uzyskać do niego dostęp za pomocą właściwości modelu $data
. Poniższy przykład sprawdza sprawdzane przez nas pole, aby upewnić się, że jest taki sam jak inne pole zdefiniowane w regułach sprawdzania poprawności (np. pole potwierdzenia hasła). wyglądałby tak:
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.'
)
)
);
Nasza funkcja walidacji następnie analizuje dane przekazanego pola (confirm_password) i porównuje je z tym, który zdefiniowaliśmy w regule (przekazywany do $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);
}
Jest to prosty przykład, ale można zrobić cokolwiek chcesz z $this->data
.
Przykład w post może wyglądać tak:
function requireNotEmpty(&$data, $shouldNotBeEmpty) {
return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}
a reguła:
var $validate = array(
'verify_password' => array(
'rule' => array('requireNotEmpty', 'password')
)
);
Dzięki za wyjaśnienie :) – Alvaro
Mam nadzieję, że zdaje się pewne rzeczy się! – jeremyharris
W CakePHP 2.4 nie wygląda na to, że możesz przekazać odwołanie do funkcji, nie sprawdziło się to dla mnie, ale użycie przykładu w dokumentach i zmiana go na $ check działało. – mtpultz