2015-05-09 17 views
6

Nie mogę wymyślić, jak edytować regułę sprawdzania poprawności w locie, na przykład w moim kontrolerze.CakePHP 3.x: jak edytować regułę sprawdzania poprawności w locie

Moja sprawa: tabela "użytkownicy" zawiera pole "e-mail", którego wartość musi być "unikalna" podczas tworzenia i aktualizowania. Na razie dobrze, stworzyłem poprawne reguły sprawdzania poprawności.

Ale teraz muszę utworzyć akcję, która pozwoli użytkownikom odzyskać swoje hasło. Jest więc formularz, w którym użytkownicy wpisują swój adres e-mail, a ten formularz musi zostać zatwierdzony. Po tym akcie sprawdza, czy istnieje ten adres e-mail i wysyła wiadomość e-mail, aby zresetować hasło.

Tak więc: muszę potwierdzić formularz z zasadami sprawdzania poprawności, ale w tym konkretnym przypadku nie potrzebuję adresu e-mail "unikatowy".

Jak zmienić regułę sprawdzania poprawności tylko dla jednej akcji?

Dzięki.


EDIT

Może to?

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; 
    } 
} 

W moim działania:

$user = $this->Users->newEntity($this->request->data(), [ 
    'validate' => 'OnlyCheck' 
]); 
+1

Dla mnie to brzmi tak, jakby trzeba zastosować oddzielny walidator, jak to jest tylko o jedno pole, które nie jest jeszcze wielobranżowe być zbawiony? – ndm

+0

Dzięki @ndm, może mogę to zrobić: w tym konkretnym przypadku używam nowego weryfikatora, który rozszerza oryginalny ('UserOnlyCheckValidator rozszerza UserValidator'). W nowym walidatorze mam tylko [usuń] (http://api.cakephp.org/3.0/class-Cake.Validation.Validator.html#_remove) tę regułę. O czym myślisz? –

+0

@ndm, zobacz moją ostatnią edycję –

Odpowiedz

7

Co masz w swoim pytaniu po tej edycji jest zamierzony sposób, w jaki CakePHP 3 pozwala na użycie różnych/dynamiczne reguły sprawdzania poprawności na przypadek użycia.

use Cake\Validation\Validator; 
class UsersTable extends Table { 
    public function validationDefault(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(Validator $validator) { 
     $validator = $this->validationDefault($validator); 
     $validator->remove('email', 'unique'); 
     return $validator; 
    } 
} 

A potem:

$user = $this->Users->newEntity($this->request->data(), [ 
    'validate' => 'OnlyCheck' 
]); 
+0

niesamowite! działa jak urok !! –