Quando si convalida i dati su un modello, i dati sono già set()
. Ciò significa che è è possibile accedervi sulla proprietà $data
del modello L'esempio seguente controlla il campo che si sta verificando per assicurarsi che sia uguale ad altri campi definiti nelle regole di convalida (ad esempio un campo di conferma password)
La regola di convalida sarebbe simile a questa:
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.'
)
)
);
La nostra funzione di convalida esamina quindi i dati del campo passato (confirm_password) e li confronta con quelli che abbiamo definito nella regola (passati a $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);
}
Questo è un semplice esempio, ma si poteva fare tutto quello che vuoi con $this->data
.
L'esempio nel tuo post potrebbe essere simile a questa:
function requireNotEmpty(&$data, $shouldNotBeEmpty) {
return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}
E la regola:
var $validate = array(
'verify_password' => array(
'rule' => array('requireNotEmpty', 'password')
)
);
Grazie per la spiegazione :) – Alvaro
spero che cancellato alcune cose su! – jeremyharris
In CakePHP 2.4 non sembra che tu possa passare per riferimento alla funzione, non sembra funzionare per me, ma usando l'esempio nei documenti e cambiandolo in $ check funzionava. – mtpultz