Extbase - Validierung das Validator Objekt
Validatoren - Einführung
Validierungsarten in Extbase
- Property Validation - validiert eine Eigenschaft eines Model (z.B. title).
- Object Validation validiert das gesamte Objekt, und zwar jedes Mal wenn eine Validierung stattfindet (z.B. Blog Objekt).
- 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
Wird im Model also Annotation und im TCA definiert.
/**
* This is the title of the blog
* @var \string
* @validate NotEmpty
*/
protected $title;
'eval' => 'trim,required'
Wo, Wann und Was und Wie wird Validiert
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)
In einer eigenen Extension lassen sich die Validatoren relativ einfach verwenden.
- Im Modell bekommen die Properties die gewünschten Validierungen zugewiesen (über die Annotations)
- 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
Ordnerstruktur
Vorsicht Bug in Extbase (ToDo)
- ExtensionOrdner
- Classes
-Validation
- Validator
- MyValidatorNameValidator.php
Validator erbt von von AbstractValidator
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
Validatoren in Extbase
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