2015-02-09 40 views
7

Ho due campo "password" (Questo campo si trova nel database) e confirm_password (Questo campo non è presente nel database)CakePHP 3 - Confronta le password

Beh, ho bisogno di confrontare se la password == confirm_password. . ma non sto conoscendo creare una convalida personalizzata per "confirm_password" ... Avrebbe bisogno di avere questo campo nel database?

Come si fa?

risposta

22

In generale è possibile accedere a tutti i dati in un custom validation rule tramite l'argomento $context, in cui è memorizzato nella chiave data, cioè $context['data']['confirm_password'], che si può quindi confrontare con il valore corrente campi.

$validator->add('password', 'passwordsEqual', [ 
    'rule' => function ($value, $context) { 
     return 
      isset($context['data']['confirm_password']) && 
      $context['data']['confirm_password'] === $value; 
    } 
]); 

Detto questo, di recente una regola compareWith convalida è stata introdotta, che fa esattamente questo.

https://github.com/cakephp/cakephp/pull/5813

$validator->add('password', [ 
    'compare' => [ 
     'rule' => ['compareWith', 'confirm_password'] 
    ] 
]); 
+0

Come faccio a impostare un messaggio? "Password non valida" utilizzando "compareWith" – TMoraes

+0

Ok, solo "messaggio" => "Password non valida" .. Ma vorrei sapere, Come faccio a mostrare questo messaggio qui sotto il campo confirm_password? Perché mostra il campo della password qui sotto. – TMoraes

+1

@ThiagoMoraes Aggiungi semplicemente la stessa regola per il campo 'confirm_password' e confronta con' password'. – ndm

2

ora non v'è una chiamata di metodo sameAs in classe di convalida, per la versione 3.2 o grattugia.

$validator -> sameAs('password_match','password','Passwords not equal.'); 

vedere API