TYPO3 Adventskalender 2025
07.12.2025: Symfony Validatoren in Extbase
Schon seit langem bietet Extbase komfortable Validatoren, die man auf Eigenschaften von Domänenmodellen (z.B. “Titel”, “Postleitzahl”, …) oder auch auf ActionController-Ebene setzen kann:
<?php use TYPO3\CMS\Extbase\Attribute\Validate; use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; class Adventstuer extends AbstractEntity { #[Validate(validator: 'NotEmpty')] #[Validate(validator: 'StringLength', options: ['minimum' => 10, 'maximum' => 80])] protected string $titel = ''; #[Validate(validator: 'NumberRange', options: ['minimum' => 1, 'maximum' => 24])] protected int $tuer = ''; // ... }
Mit diesem Code würde man also mehrere Validatoren anwenden, die beim Speichern/Aktualisieren von Datensätze mit Extbase aufgerufen werden und bei Fehleingaben entsprechende Meldungen darstellen können.
Kleines Goodie: Neu in TYPO3 v14 ist auch, dass die Validatoren nun direkte Argumente nutzen können, und nicht ein ganzes Array definieren. Vergleiche:
Jetzt: #[Validate(validator: 'StringLength', options: ['minimum' => 1])]
Früher: #[Validate(['validator': 'StringLength', 'options': ['minimum' => 1]])]
Die Neuheit ist nun: Jetzt können nicht nur die TYPO3-spezifischen Extbase-Validatoren als Attribut angewendet werden, sondern die ganze Liste an Validatoren aus der Symfony-Welt:
https://symfony.com/doc/current/validation.html#constraints
Damit gibt es eine riesige Menge an nutzbaren Constraints, z.B. für Wortzählung oder IBAN-Validierung:
<?php use Symfony\Component\Validator\Constraints as Assert; use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; class Weihnachtsgeschichte extends AbstractEntity { #[Assert\WordCount(max: 200, maxMessage: 'Eine echte Geschichte braucht mehr Wörter!')] protected string $inhalt = ''; #[Assert\CssColor(message: 'my_extension.messages:error.avatarColor')] protected string $tuerfarbeColor = ''; #[Assert\Iban] protected string $spende = ''; }
Die Symfony Constraints werden dabei so erweitert, dass die TYPO3-typische “LLL:EXT” Sprachnotation natürlich unterstützt wird für ausgegebene Fehlermeldungen – oder jetzt auch “Translation Domains”, achtet mal auf eine folgende Adventstüre!
Herzlichen Dank an dieser Stelle an Elias Häußler für die Implementation und etwas Ping-Pong mit mir :-)