Ich möchte bestimmte Bereich meines Modells validieren, da ich mehrstufige Form implementieren. This method von CakePHP 2 funktioniert nicht in Version 3. Wie weiter?So validieren Sie teilweise ein Modell in CakePHP 3
Antwort
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
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.
- 1. CakePHP 3: Formular validieren
- 2. Kann das Formular nicht validieren CakePHP 3
- 3. Funktion in CakePHP validieren
- 4. Dreistufig teilweise verschachteltes Modell
- 5. So speichern Sie HasMany Associations Daten in CakePHP 3.x
- 6. So validieren Sie scss
- 7. Turbolinks 3 und macht ein teilweise
- 8. So validieren Sie ungebundene Felder
- 9. Mehrere Zuordnungen zum gleichen Modell in CakePHP 3
- 10. in cakephp 3
- 11. So führen Sie SQL-Abfrage in CakePHP manuell ohne ein Modell aus
- 12. So finden Sie ein Modell in CakePHP (ich kann nicht finden)?
- 13. Wie kann ich ein zugehöriges Modell validieren?
- 14. Modell- und Controllerstruktur in CakePHP
- 15. Core.php in CakePHP 3
- 16. So validieren Sie SMTP-Server
- 17. Kein SQL Modell in CakePHP
- 18. CakePHP 3 NICHT in Frage
- 19. Kann ein Modell mehrere CakePHP-Tabellen haben?
- 20. So validieren Sie einfach ein Kontrollkästchen in Schienen
- 21. Kann CakePHP Modell
- 22. CakePHP Multi-Modell-Ansicht
- 23. CakePHP 3: Warum nicht Session im Modell verwenden
- 24. So validieren Sie benutzerdefinierte Felder in moodle
- 25. So validieren Sie Sammlungen in Karten
- 26. So validieren Sie die Nachkommastellen
- 27. Modell speichern in afterSave() in CakePHP
- 28. CakePHP 3 E-Mail Validierung
- 29. devise invitable nicht validieren Modell
- 30. CakePHP 3: Cookies Tutorial
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
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; } ' –