2015-05-09 5 views
6

Ich kann nicht herausfinden, wie man eine Validierungsregel im laufenden Betrieb, zum Beispiel in meinem Controller, bearbeitet.CakePHP 3.x: wie man eine Validierungsregel im laufenden Betrieb bearbeitet

Mein Fall: Die Tabelle "Benutzer" hat das Feld "E-Mail", deren Wert beim Erstellen und Aktualisieren "eindeutig" sein muss. Für jetzt ist es in Ordnung, ich habe die richtigen Validierungsregeln erstellt.

Aber jetzt muss ich eine Aktion erstellen, mit der Benutzer ihr Kennwort wiederherstellen können. Es gibt also ein Formular, in dem Benutzer ihre E-Mail-Adresse eingeben und dieses Formular muss validiert werden. Danach überprüft die Aktion, ob es diese E-Mail-Adresse gibt und sendet eine E-Mail, um das Passwort zurückzusetzen.

Also: Ich muss das Formular mit den Validierungsregeln validieren, aber in diesem speziellen Fall brauche ich die E-Mail nicht "einzigartig".

Wie kann die Validierungsregel nur für eine Aktion geändert werden?

Danke.


EDIT

Vielleicht?

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

In meiner Aktion:

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

mir, dass so klingt, als ob Sie eine separate Validator verwenden sollten, da dies nur über ein Feld, das nicht einmal gespeichert werden soll ment? – ndm

+0

Danke @ndm, vielleicht kann ich das tun: Für diesen speziellen Fall verwende ich einen neuen Validator, der den ursprünglichen erweitert ('UserOnlyCheckValidator erweitert UserValidator'). Im neuen Validator habe ich nur diese Regel gelöscht (http://api.cakephp.org/3.0/class-Cake.Validation.Validator.html#_remove). Worüber denkst du nach? –

+0

@ndm, siehe meine letzte Bearbeitung –

Antwort

7

Was Sie in Ihrer Frage haben nach dem Bearbeiten die beabsichtigte Art und Weise ist, in der CakePHP 3 ermöglicht es Ihnen, verschiedene/dynamische Validierungsregeln pro Anwendungsfall zu verwenden.

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

Und dann:

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

genial! Arbeit wie Charme !! –

Verwandte Themen