2016-04-18 15 views

Antwort

1

Yeah sieht aus wie in Kuchen 3 sie die Validates() Methode los war. Die Validierung wird nur ausgelöst, wenn Sie newEntity oder patchEntity aufrufen. Wenn es wichtig ist, eine nach der anderen zu validieren, müssen Sie möglicherweise jedes Feld separat patchen und nach jedem Fehler auf Fehler prüfen.

$userEntity = $usersTable->newEntity(); 
$userEntity = $usersTable->patchEntity(['email' => 'not an email!!']); 
if($userEntity->errors('email')){ 
    return false; // Invalid email 
} 

gemäß

http://book.cakephp.org/3.0/en/orm/validation.html#using-validation-as-application-rules

+0

Wie wäre es mit mehreren Feldern? Ich gehe so vor 'if ($ userEntity-> errors ([' email ',' username ']])) aber bekomme immer noch eine Nachricht über alle anderen Felder. – sk001

+1

hmm interessant. vielleicht versuchen [link] (http://book.cakephp.org/3.0/en/core-libraries/validation.html#validating-data). '$ errors = $ validator-> errors ($ this-> request-> data()); if (isset ($ fehler ['email'])) { return false; } ' –

3

finden Sie in der Dokumentation auf using a different validation set. Sie müssen Funktionen zum Überprüfen jedes Schrittes des Formulars einrichten und angeben, welche Funktion in Ihrem newEntity oder patchEntity Aufruf verwendet werden soll. Bei einem mehrstufigen Formular würde die Validierung für den zweiten Schritt vermutlich die Validierung für den ersten Schritt hinzufügen, um sicherzustellen, dass keine Manipulation mit den dazwischen liegenden Daten vorgenommen wurde. Also, würden Sie so etwas wie diese:

In der Reglerfunktion für Schritt 1:

$entity = $table->newEntity(
    $this->request->data, 
    ['validate' => 'step1'] 
); 

und in der Reglerfunktion für Schritt 2:

$entity = $table->newEntity(
    $this->request->data, 
    ['validate' => 'step2'] 
); 

usw.

In Ihre Tischklasse:

public function validationStep1($validator) 
{ 
    $validator 
     ->add('email', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide a valid email'), 
     ]) 
     ->add('username', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide a valid username') 
     ]); 
    return $validator; 
} 

(vermutlich mit anderen Validierung, wie sicherstellen, dass die E-Mail-Adresse Sinn macht).

Und dann

public function validationStep2($validator) 
{ 
    $validator = $this->validationStep1($validator) 
     ->add('first_name', 'notEmpty', [ 
      'rule' => 'notEmpty', 
      'message' => __('Provide your first name'), 
     ]); 
    return $validator; 
} 

und so weiter.