Symfony/Validator für PHP: Komplette Anleitung mit Beispielen
1. Was ist das und wozu braucht man es?
Die Bibliothek Symfony/Validator ist eine leistungsstarke und flexible Komponente des Symfony-Ökosystems, die speziell für die Datenvalidierung entwickelt wurde. Im Gegensatz zu einfachen "Ad-hoc"-Prüfungen bietet diese Komponente einen deklarativen Ansatz: Sie beschreiben die Validierungsregeln (Constraints) mit Hilfe von Annotationen, PHP 8+ Attributen, YAML, XML oder PHP-Arrays und übergeben die Daten dann an einen speziellen Dienst – ValidatorInterface. Dadurch wird die Prüflogik von der Geschäftslogik der Anwendung getrennt, was den Code sauberer, testbarer und wiederverwendbarer macht.
Warum ist das notwendig? In jeder Webanwendung (und nicht nur dort) stammen Daten aus unsicheren Quellen: Formulare auf der Website, API-Anfragen, Importe aus CSV-Dateien. Ohne Validierung riskieren Sie SQL-Injection, XSS-Angriffe, fehlerhafte Berechnungen oder einfach "Müll" in der Datenbank. Symfony/Validator löst diese Probleme umfassend: Es prüft Datentypen, Zeichenkettenlängen, Zahlenbereiche, E-Mail-Eindeutigkeit, Übereinstimmung mit regulären Ausdrücken und vieles mehr. Darüber hinaus sammelt es alle Fehler in einem einzigen Objekt – ConstraintViolationList –, das sich leicht in eine JSON-Antwort für eine API umwandeln oder als Fehlerliste in einem Formular anzeigen lässt.
Die Komponente ist völlig unabhängig vom Symfony-Framework. Sie können sie in jedem PHP-Projekt verwenden (Laravel, Yii, eigenes Framework oder sogar "reines" PHP). Sie wird aktiv gewartet, hat eine hervorragende Dokumentation und eine riesige Community. Sie gilt als der "Goldstandard" für Validierung in der PHP-Welt.
2. Installation
Die Installation erfolgt über Composer. Führen Sie im Terminal im Stammverzeichnis Ihres Projekts folgenden Befehl aus:
composer require symfony/validator
Es wird außerdem empfohlen, die Komponente symfony/property-access zu installieren, um eine korrekte Arbeit mit verschachtelten Objekten und Arrays zu gewährleisten:
composer require symfony/property-access
Wenn Sie Annotationen/Attribute verwenden möchten, stellen Sie sicher, dass doctrine/annotations installiert ist (für PHP 7.x) oder Sie PHP 8+ mit nativen Attributen verwenden.
3. Schnellstart – Minimales funktionsfähiges Beispiel
Erstellen wir eine einfache Klasse User mit Validierungsattributen und prüfen sie.
<?php
// 1. Composer-Autoload einbinden
require_once 'vendor/autoload.php';
// 2. Notwendige Klassen importieren
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints as Assert;
// 3. Klasse mit Validierungsattributen erstellen (PHP 8+)
class User {
#[Assert\NotBlank(message: "Der Name darf nicht leer sein.")]
#[Assert\Length(min: 2, max: 50, minMessage: "Der Name muss mindestens {{ limit }} Zeichen lang sein.")]
public string $name;
#[Assert\NotBlank]
#[Assert\Email(message: "Die E-Mail '{{ value }}' ist nicht gültig.")]
public string $email;
#[Assert\PositiveOrZero]
public int $age;
}
// 4. Validator erstellen
$validator = Validation::createValidatorBuilder()
->enableAttributeMapping() // Attribut-Unterstützung aktivieren
->getValidator();
// 5. Objekt mit ungültigen Daten erstellen
$user = new User();
$user->name = 'A'; // Zu kurzer Name
$user->email = 'keine-gueltige-email';
$user->age = -5;
// 6. Validieren
$violations = $validator->validate($user);
// 7. Fehler behandeln
if (count($violations) > 0) {
foreach ($violations as $violation) {
echo $violation->getPropertyPath() . ': ' . $violation->getMessage() . "\n";
}
} else {
echo "Daten sind gültig!";
}
Dieses Beispiel gibt Folgendes aus:
name: Der Name muss mindestens 2 Zeichen lang sein.
email: Die E-Mail 'keine-gueltige-email' ist nicht gültig.
age: Dieser Wert muss entweder positiv oder null sein.
4. Wichtige Methoden/Funktionen/Klassen
4.1. Validation::createValidatorBuilder()
Signatur:
Auch in der Bibliothek
Reaktive Programmierung in Swift: Combine und RxSwift für iOS/macOS
Okio für Kotlin: Vollständiges I/O-Guide mit Beispielen
E-Mail-Versand mit Go (Golang): Bibliotheken und Codebeispiele
Arbeiten mit CSV in Go (Golang): Vollständige Anleitung zum Parsen und Schreiben
Event Bus und das Observer-Muster in C++: Implementierung und Beispiele