Zum Hauptinhalt springen

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 Helper request() bezogene Illuminate\Http\Request bindet InteractsWithData über Concerns\InteractsWithInput ein. Daher stehen die alltäglichen Eingabezugriffe wie folgt über den Trait bereit:
$search = request()->input('search');

if (request()->has('search')) {
    $filters = request()->only(['search', 'status']);
}

$payload = request()->except(['_token']);
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().
$legacy = request()->get('search');  // Kompatibilitätsmethode (empfohlen: input())

Wichtige Implementierungen im Laravel-Kern

Klassen, die InteractsWithData direkt einbinden

KlasseZweck
Illuminate\Http\Concerns\InteractsWithInputEingabezugriffs-API des Request
Illuminate\Support\ValidatedInputRückgabe-Wrapper für validated() / safe()
Illuminate\Support\FluentFluent-Zugriff auf Konfigurationswerte und beliebige Attribute
Illuminate\Support\UriQueryStringBearbeitung der Query-Strings eines Uri
Illuminate\View\ComponentAttributeBagBearbeitung der Attribute von Blade-Komponenten

Verwandte Implementierungen mit ähnlicher Verantwortung

  • Illuminate\Session\Store implementiert eine ähnliche API wie has(), get(), only(), except() selbständig.
  • Illuminate\Validation\Concerns\ValidatesAttributes stellt die Bewertungslogik für die Validierung bereit; die reine Eingabezugriffs-API ist bewusst getrennt vom InteractsWithData entworfen.

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.
1

Eine Daten-Containerklasse anlegen

namespace Vendor\Package\Support;

use Illuminate\Support\Arr;
use Illuminate\Support\Traits\InteractsWithData;

class OptionBag
{
    use InteractsWithData;

    /**
     * @param  array<string, mixed>  $items
     */
    public function __construct(
        protected array $items = [],
    ) {}

    public function all($keys = null): array
    {
        if (! $keys) {
            return $this->items;
        }

        $result = [];

        $keyList = is_array($keys) ? $keys : [$keys];

        foreach ($keyList as $key) {
            Arr::set($result, $key, Arr::get($this->items, $key));
        }

        return $result;
    }

    protected function data($key = null, $default = null): mixed
    {
        return data_get($this->items, $key, $default);
    }
}
2

Über typisierte Accessor sicher lesen

$options = new OptionBag([
    'feature.enabled' => 'true',
    'retry.max' => '5',
    'channels' => ['mail', 'slack'],
]);

$enabled = $options->boolean('feature.enabled'); // true
$retryMax = $options->integer('retry.max');      // 5
$channels = $options->collect('channels');       // Collection
$public = $options->except(['secret']);          // schließt secret aus

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
Da Sie nur all() und data() implementieren müssen, sparen Sie sich das erneute Selbstschreiben einer Eingabezugriffs-API und senken die Wartungskosten.

Verwandte Seiten

Zuletzt geändert am 13. Juli 2026