2015-02-09 12 views
7

mam dwa pola „hasło” (to pole jest w bazie danych) i confirm_password (To pole nie jest w bazie danych)CakePHP 3 - Porównanie Hasła

dobrze, muszę porównać jeśli hasło == confirm_password. ale nie wiem, czy utworzyć niestandardową walidację do "potwierdź_hasło" ... Czy to pole musi być w bazie danych?

Jak mam zrobić?

Odpowiedz

22

Generalnie można uzyskać dostęp do wszystkich danych w custom validation rule poprzez $context argumentu, gdzie jest przechowywana w kluczu data, tj $context['data']['confirm_password'], które można następnie porównać do aktualnej wartości pól.

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

Powiedział, że niedawno reguła compareWith walidacja została wprowadzona który robi dokładnie to.

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

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

Jak ustawić wiadomość? "Password Invalid" przy użyciu "compareWith" – TMoraes

+0

OK, tylko "message" => 'Password Invalid ".. Ale chciałbym wiedzieć, Jak zrobić, aby pokazać tę wiadomość poniżej pola_hasła_prawdu? Ponieważ pokazuje to pole hasła poniżej. – TMoraes

+1

@ThiagoMoraes Po prostu dodaj tę samą regułę dla pola 'confirm_password' i porównaj z' password' . – ndm

2

Teraz nie ma sameAs wywołanie metody w klasie walidatora, w wersji 3.2 lub tarką.

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

zobaczyć API