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\Validateuse 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 Assertuse TYPO3\CMS\Extbase\DomainObject\AbstractEntity; 
 
class Weihnachtsgeschichte extends AbstractEntity 
{ 
    #[Assert\WordCount(max200maxMessage'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 :-)

BITV Check - Wir prüfen Ihre Website oder Ihr digitales Produkt.

Wir setzen die Projekte unsere Kunden nicht nur BITV-konform um, wir prüfen auch Websites, Apps und digitale Produkte hinsichtlich der gesetzlichen Anforderungen. Buchen Sie unser 30-Minten-Erstgespräch - unverbindlich, klar und kompetent. Denn digitale Barriefreiheit ist Pflicht.