Was ist der InteractsWithData-Trait?
Illuminate\Support\Traits\InteractsWithData ist ein Trait, der eine „gemeinsame API für array-ähnliche Eingabedaten” bündelt.
Der Trait selbst verlangt lediglich die beiden abstrakten Methoden all() und data() und delegiert die eigentliche Datenzugriffslogik an die jeweilige Klasse. Im Gegenzug stellt er häufig benötigte Methoden bereit, darunter:
- Existenzprüfung:
has(),hasAny(),exists(),missing() - Leerprüfung:
filled(),isNotFilled(),anyFilled() - Bedingte Ausführung:
whenHas(),whenFilled(),whenMissing() - Auszug:
only(),except() - Typkonvertierung:
string(),boolean(),integer(),float(),date(),enum(),collect()
Verhältnis zu den Request-Methoden
Der über den Helperrequest() bezogene Illuminate\Http\Request bindet InteractsWithData über Concerns\InteractsWithInput ein.
Daher stehen die alltäglichen Eingabezugriffe wie folgt über den Trait bereit:
Request::get() ist eine Symfony-kompatible Methode direkt in der Klasse Request. Auch im Quellcode von Laravel 13 ist sie ausdrücklich mit @deprecated use ->input() instead markiert; empfohlen wird input().
Wichtige Implementierungen im Laravel-Kern
Klassen, die InteractsWithData direkt einbinden
| Klasse | Zweck |
|---|---|
Illuminate\Http\Concerns\InteractsWithInput | Eingabezugriffs-API des Request |
Illuminate\Support\ValidatedInput | Rückgabe-Wrapper für validated() / safe() |
Illuminate\Support\Fluent | Fluent-Zugriff auf Konfigurationswerte und beliebige Attribute |
Illuminate\Support\UriQueryString | Bearbeitung der Query-Strings eines Uri |
Illuminate\View\ComponentAttributeBag | Bearbeitung der Attribute von Blade-Komponenten |
Verwandte Implementierungen mit ähnlicher Verantwortung
Illuminate\Session\Storeimplementiert eine ähnliche API wiehas(),get(),only(),except()selbständig.Illuminate\Validation\Concerns\ValidatesAttributesstellt die Bewertungslogik für die Validierung bereit; die reine Eingabezugriffs-API ist bewusst getrennt vomInteractsWithDataentworfen.
Beziehung zwischen Trait und wichtigen Klassen
In eigenen Klassen für die Paketentwicklung einsetzen
InteractsWithData eignet sich für Klassen innerhalb eines Pakets, die „ein Eingabe-Array halten und eine Laravel-artige Zugriffs-API bereitstellen” sollen.
Praktische Anwendungsfälle
- Options-Bag für externe API-Clients
- Normalisierungs-Layer für Webhook-Payloads
- Klasse zur Auflösung von Konfigurations-Overrides in einem Paket
all() und data() implementieren müssen, sparen Sie sich das erneute Selbstschreiben einer Eingabezugriffs-API und senken die Wartungskosten.