Skip to main content

Was sind eigene Validierungsregeln?

Laravel bietet zahlreiche eingebaute Validierungsregeln, aber manchmal brauchen Sie anwendungsspezifische Prüfungen. Eigene Validierungsregeln erlauben es, Prüflogik als Klasse oder Closure zu definieren und wie eine Standardregel zu verwenden. Es gibt im Wesentlichen zwei Wege, eigene Regeln zu definieren:
  • Rule-Objekt — hoch wiederverwendbar und gut testbar
  • Closure — passend für einfache, einmalig verwendete Regeln

Rule-Objekte

Rule-Klasse erzeugen

Erzeugen Sie eine neue Rule-Klasse mit dem Artisan-Kommando make:rule. Sie landet unter app/Rules.

Das Interface ValidationRule implementieren

Implementieren Sie in der generierten Klasse die Methode validate. Bei Fehlschlag rufen Sie die Closure $fail auf.
In der an $fail übergebenen Zeichenkette dürfen Sie den Platzhalter :attribute verwenden — Laravel ersetzt ihn durch den Feldnamen.

Rule-Objekt anwenden

Übergeben Sie eine Instanz Ihrer Rule an das Validierungs-Array.
In rules() einer Form Request funktioniert es genauso.

Fehlermeldungen mit Übersetzungs-Keys

Statt eine Meldung fest im Code zu hinterlegen, können Sie einen Übersetzungs-Key verwenden.
Fügen Sie den Text in die Sprachdatei lang/de/validation.php ein.

Mehrere Fehlermeldungen ausgeben

Um für ein Feld mehrere Fehler zu melden, rufen Sie $fail mehrfach auf.

Closure-basierte Regeln

Für einfache, nur einmalig verwendete Regeln in einer Anwendung genügt eine Closure — Sie brauchen keine Klasse.
Closure-Regeln sind inline schnell definiert, aber wiederverwendbar und isoliert testbar sind sie nur bedingt. Für an mehreren Stellen benötigte Logik empfiehlt sich das Rule-Objekt.

Implizite Regeln (auch für leere Werte ausführen)

Standardmäßig laufen eigene Regeln nicht, wenn das Feld leer ist oder gar nicht vorhanden. Wenn Sie die Regel auch für leere Werte ausführen wollen, erzeugen Sie die Klasse mit der Option --implicit.
Die generierte Klasse implementiert das Interface ImplicitRule. Dieses Interface hat selbst keine zusätzlichen Methoden — es dient als Signal an Laravel.
ImplicitRule signalisiert Laravel lediglich, dass „das Attribut erforderlich ist”. Ob bei leerem Wert wirklich eine Fehlermeldung entsteht, hängt von Ihrer validate-Implementierung ab.

Zugriff auf Daten

DataAwareRule — Zugriff auf alle Formularfelder

Wenn Sie basierend auf Werten anderer Felder validieren wollen, implementieren Sie DataAwareRule. setData wird automatisch vor Beginn der Validierung aufgerufen.
Anwendungsbeispiel:

ValidatorAwareRule — Zugriff auf die Validator-Instanz

Um auf sämtliche Informationen des Validators (fehlgeschlagene Regeln, eigene Meldungen usw.) zuzugreifen, implementieren Sie ValidatorAwareRule.

Praktische Anwendungsfälle

Prüfung auf japanische Zeichen

Eine Regel, die den Zeichensatz prüft.

Prüfung japanischer Telefonnummern

Eine Regel, die japanische Telefonnummernformate akzeptiert.

Unique-Constraint mit Tenant-ID

Ein häufiges Muster in Multi-Tenant-Anwendungen: Eindeutigkeit innerhalb eines Tenant-Scope.
1

Rule-Klasse anlegen

2

In der Form Request verwenden

3

Beim Update die eigene ID ausschließen

Beim Aktualisieren eines Datensatzes sollten Sie die eigene ID von der Duplikatsprüfung ausnehmen.

Regeln im Service Provider registrieren

Regeln mit Validator::extend() ergänzen

Mit Validator::extend() können Sie eigene Regeln in String-Form ('rule_name') verwenden. Registrieren Sie sie in der Methode boot() des AppServiceProvider.
So registrierte Regeln lassen sich als String angeben.
Validator::extend() ist der ältere Registrierungsweg. Für neue Entwicklung empfehlen wir Rule-Objekte über das Interface ValidationRule.

Statische Methode an der Rule-Klasse anfügen

Sie können der Facade Rule per Macro eine Methode hinzufügen und so eine fluent API wie Rule::myRule() anbieten.

Details der internen Implementierung

Werfen wir einen Blick darauf, wie Illuminate\Validation\Validator eigene Regeln aufruft. Innerhalb des Validators verarbeitet validateAttribute() jedes Feld. Wenn die Regel ValidationRule implementiert, wird validateUsingCustomRule() aufgerufen.
Ob ImplicitRule verarbeitet wird, entscheidet isImplicit(). Ist das Signal gesetzt, läuft die Regel auch bei leerem Wert.
Sie können DataAwareRule und ValidatorAwareRule gleichzeitig implementieren. In diesem Fall werden beide Injektionen durchgeführt.

Verwandte Seiten

Validierung (Einstieg)

Standardvorgehen für Validierung in Controllern und Form Requests.
Zuletzt geändert am 13. Juli 2026