Welcome to the Cookbook

loading...

4.1.6 Daten im Controller validieren

Der Originaltext dieses Abschnitts hat sich seit der letzen Übersetzung geändert. Bitte hilf dabei die Unterschiede zu lösen. Du kannst:

Mehr Informationen zu Übersetzungen

Normalerweise werden Daten beim Aufruf der save-Methode des Models validiert. In einigen Fällen jedoch möchte man Daten validieren, ohne sie gleichzeitig zu speichern. Zum Beispiel wenn dem Benutzer noch zusätzliche Informationen anzeigt werden sollen, bevor die Daten in die Datenbank geschrieben werden. Die Validierung erfordert ein etwas anderes Vorgehen als beim Speichern:

Zuerst werden die Daten an das Model übergeben:

$this->ModelName->set( $this->data );
  1. $this->ModelName->set( $this->data );

Anschließend wird zur Validierung der Daten die validates-Methode des Models aufgerufen. Die Methode gibt true zurück, wenn die Validierung erfolgreich ist oder false, wenn sie fehlschlägt.

if ($this->ModelName->validates()) {
	// die Daten sind valide
} else {
	// die Daten sind nicht valide
}
  1. if ($this->ModelName->validates()) {
  2. // die Daten sind valide
  3. } else {
  4. // die Daten sind nicht valide
  5. }

Es könnte sein, dass du nur eine Teilmenge der Validierungsregeln in deinem Model zur Validierung einsetzen möchtest. Angenommen, du hast ein User-Model mit Feldern "first_name", "last_name", "email" und "password". Wird ein User hinzugefügt oder bearbeitet, möchtest du alle vier entsprechenden Regeln validieren. Loggt sich ein User jedoch nur ein, sollen nur die "email" und "password" Regeln geprüft werden. In dem Fall kannst du ein Array, welches die zu validierenden Felder angibt, mit übergeben, für unser Beispiel also:

if ($this->User->validates(array('fieldList' => array('email', 'password')))) {	 
// Gültig
} else {	 
// Ungültig
}
  1. if ($this->User->validates(array('fieldList' => array('email', 'password')))) {
  2. // Gültig
  3. } else {
  4. // Ungültig
  5. }

Die validates-Methode ruft die invalidFields-Methode auf, welche die Eigenschaft validationErrors des Models befüllt. Die invalidFields-Methode gibt die Daten zudem als Rückgabewert aus.

$errors = $this->ModelName->invalidFields(); // enthält das validationErrors-Array
  1. $errors = $this->ModelName->invalidFields(); // enthält das validationErrors-Array

Denke daran, dass Du die Daten über die set-Methode an das Model übergeben musst, bevor sie validiert werden können. Dies ist ein Unterschied zum Speichern über die save-Methode, bei der Du die Daten als Parameter übergeben kannst. Es ist jedoch nicht notwendig, die validates-Methode vor jedem save aufzurufen, da die Daten beim Speichern automatisch validiert werden.

Um mehrere Models in einem Schritt zu validieren, solltest Du folgendermaßen vorgehen:

if ($this->ModelName->saveAll($this->data, array('validate' => 'only'))) {
  // die Daten sind valide
} else {
  // die Daten sind nicht valide
}
  1. if ($this->ModelName->saveAll($this->data, array('validate' => 'only'))) {
  2. // die Daten sind valide
  3. } else {
  4. // die Daten sind nicht valide
  5. }