Non riesco a capire come modificare una regola di convalida al volo, ad esempio nel mio controller.CakePHP 3.x: come modificare una regola di convalida al volo
Il mio caso: la tabella "utenti" ha il campo "email", il cui valore deve essere "univoco" durante la creazione e l'aggiornamento. Per ora va bene, ho creato le regole di validazione corrette.
Ma ora devo creare un'azione che consenta agli utenti di recuperare la propria password. Quindi c'è un modulo in cui gli utenti inseriscono il loro indirizzo email e questo modulo deve essere convalidato. Dopo, l'azione controlla se c'è quell'indirizzo e-mail e invia una e-mail per reimpostare la password.
Quindi: devo convalidare il modulo con le regole di convalida, ma in questo caso particolare non ho bisogno che l'email sia "unica".
Come modificare la regola di convalida solo per un'azione?
Grazie.
EDIT
Forse questo?
class UsersTable extends Table {
public function validationDefault(\Cake\Validation\Validator $validator) {
//Some rules...
$validator->add('email', [
'unique' => [
'message' => 'This value is already used',
'provider' => 'table',
'rule' => 'validateUnique'
]
]);
//Some rules...
return $validator;
}
public function validationOnlyCheck(\Cake\Validation\Validator $validator) {
$validator->remove('email', 'unique');
return $validator;
}
}
Nella mia azione:
$user = $this->Users->newEntity($this->request->data(), [
'validate' => 'OnlyCheck'
]);
Per me che suona come se si dovrebbe usare un validatore a parte, in quanto si tratta solo di un singolo campo che non è nemmeno ment per essere salvato? – ndm
Grazie a @ndm, forse posso farlo: per questo caso specifico, utilizzo un nuovo validatore che estende quello originale ('UserOnlyCheckValidator estende UserValidator'). Nel nuovo validatore, ho solo [cancella] (http://api.cakephp.org/3.0/class-Cake.Validation.Validator.html#_remove) quella regola. Cosa ne pensi? –
@ndm, guarda il mio ultimo montaggio –