Extbase - Validierung das Validator Objekt: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 53: Zeile 53:
 
== Quickstart ==
 
== Quickstart ==
 
=== Object Validator ===
 
=== Object Validator ===
Vorsicht Bug in Extbase statt dem Ordner unten muß man (zumindest in älteren Versionen)  
+
Vorsicht Bug in Extbase statt dem Ordner unten muß man (zumindest in älteren Versionen) beim ObjectValidator ein anderes Verzeichnis wählen.
  ExtensionOrdner\Classes\Validation\Validator\
+
  ExtensionOrdner\Classes\Domain\Validator\
 
Nach Konvention ist es folgender, dort wird es aber nicht gefunden:
 
Nach Konvention ist es folgender, dort wird es aber nicht gefunden:
 
  ExtensionOrdner\Classes\Validation\Validator\ObjectnameValidator.php
 
  ExtensionOrdner\Classes\Validation\Validator\ObjectnameValidator.php

Aktuelle Version vom 29. September 2015, 11:45 Uhr

Validatoren - Einführung[Bearbeiten]

Validierungsarten in Extbase[Bearbeiten]

  1. Property Validation - validiert eine Eigenschaft eines Model (z.B. title).
  2. Object Validation validiert das gesamte Objekt, und zwar jedes Mal wenn eine Validierung stattfindet (z.B. Blog Objekt).
  3. Action Validation validiert den Input-Parameter einer Action, sobald die Action betreten wird, an der die Validierung angebracht wurde. Also i.d.R. wenn ein Formular abgesendet wurde.

Property Validation[Bearbeiten]

Wird im Model also Annotation und im TCA definiert. Kann nur die Gültigkeit einer Eigenschaft testen.

/**
 * This is the title of the blog
 * @var \string
 * @validate NotEmpty
 */
 protected $title;
'eval' => 'trim,required'

Object Validation[Bearbeiten]

Prüft das ganze Objekt. Damit kann man z.B. auch die Abhängigkeiten von mehreren Properties testen.

  • Namenskonvention: MeinObjektnameValidator
  • Abgelegt in \Domain\Validator\MainObjektnameValidator.php

Wo, Wann und Was und Wie wird Validiert[Bearbeiten]

Es wird immer validiert, wenn eine Action betreten wird. außer wenn es aktiv durch eine Annotation unterbunden wird.

/**
 * @ignorevalidation $blog
 */
public function addAction(\Lobacher\Simpleblog\Domain\Model\Blog $blog) {
...

Im Fehlerfall wird die Action errorAction() aufgerufen. Standardmäßig

TYPO3\CMS\Extbase\Mvc\Controller\ActionController.php

Diese kann durch eine eigene Methode errorAction() überschrieben werden

Validatoren in eigener Extension (Übersicht)[Bearbeiten]

In einer eigenen Extension lassen sich die Validatoren relativ einfach verwenden.

  1. Im Modell bekommen die Properties die gewünschten Validierungen zugewiesen (über die Annotations)
  2. Falls nötig eigenen Validator schreiben

Alle Validatoren erben die Funktion “validate()” und “getErrors()” von \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator. Als Rückgabe geben sie ein Array mit gut lesbarer Fehlermeldungen zurück oder einen leeren String, falls die Validierung in Ordnung war: z.B.

$email = 'john@malone.com'; // Hier testweise mal eine falsche E-Mail eingeben!
$validator = $this->objectManager->create('\TYPO3\CMS\Extbase\Validation\Validator\EmailAddressValidator');
print_r( $validator->validate($email)->getErrors() );

Quickstart[Bearbeiten]

Object Validator[Bearbeiten]

Vorsicht Bug in Extbase statt dem Ordner unten muß man (zumindest in älteren Versionen) beim ObjectValidator ein anderes Verzeichnis wählen.

ExtensionOrdner\Classes\Domain\Validator\

Nach Konvention ist es folgender, dort wird es aber nicht gefunden:

ExtensionOrdner\Classes\Validation\Validator\ObjectnameValidator.php

Validator erbt von von AbstractValidator[Bearbeiten]

z.B. (Extbase Buch) WordValidator.php

class WordValidator extends \TYPO3\CMS\Extbase\Validation\Validator\AbstractValidator {
   public function isValid($property) {
        $max = $this->options['max'];
        if (str_word_count($property, 0) <= $max) {
         return TRUE;
      } else {
         $this->addError('Verringern Sie die Anzahl der Worte - es sind maximal '.$max.' erlaubt!', 1383400016);
         return FALSE;
  } }
}

Einzige zu implementierende Funktion bleibt isValid(). Liefert diese TRUE zurück, ist die Eigenschaft gültig, liefert sie FALSE zurück, ist sie ungültig. Die Eigenschaft selbst wird als Methodenparameter übergeben und steht dann innerhalb der Funktion zur Verfügung.

Achtung wird False zurückgegeben wird nur ein Fehler in den Queue eingetragen. Um das Umleiten etc. muß man sich selber kümmern.

Validierung von zusammenhängenden Feldern[Bearbeiten]

Validatoren in Extbase[Bearbeiten]

Auszug...

\TYPO3\CMS\Extbase\Validation\Validator\AlphanumericValidator 
\TYPO3\CMS\Extbase\Validation\Validator\ConjunctionValidator 
\TYPO3\CMS\Extbase\Validation\Validator\DateTimeValidator 
\TYPO3\CMS\Extbase\Validation\Validator\DisjunctionValidator 
\TYPO3\CMS\Extbase\Validation\Validator\EmailAddressValidator 
\TYPO3\CMS\Extbase\Validation\Validator\FloatValidator 
\TYPO3\CMS\Extbase\Validation\Validator\GenericObjectValidator 
\TYPO3\CMS\Extbase\Validation\Validator\IntegerValidator 
\TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator 
\TYPO3\CMS\Extbase\Validation\Validator\NumberRangeValidator 
\TYPO3\CMS\Extbase\Validation\Validator\NumberValidator 
\TYPO3\CMS\Extbase\Validation\Validator\ObjectValidatorInterface 
\TYPO3\CMS\Extbase\Validation\Validator\RawValidator 
\TYPO3\CMS\Extbase\Validation\Validator\RegularExpressionValidator 
\TYPO3\CMS\Extbase\Validation\Validator\StringLengthValidator 
\TYPO3\CMS\Extbase\Validation\Validator\StringValidator 
\TYPO3\CMS\Extbase\Validation\Validator\TextValidator