> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# InteractsWithData-Trait

> Der Aufbau von Illuminate\Support\Traits\InteractsWithData sowie wie Sie in der Paketentwicklung eine Datenzugriffs-API in eigenen Klassen implementieren.

## 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:

```php theme={null}
$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()`.

```php theme={null}
$legacy = request()->get('search');  // Kompatibilitätsmethode (empfohlen: 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\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

```mermaid theme={null}
flowchart TD
    IWD["InteractsWithData<br>gemeinsame Datenzugriffs-API"] --> IWI["InteractsWithInput<br>Concern-Trait für Request"]
    IWI --> REQ["Request<br>input()/has()/only()/except()"]
    IWD --> VIN["ValidatedInput<br>safe()/validated()"]
    IWD --> FLU["Fluent"]
    IWD --> UQS["UriQueryString"]
    IWD --> CAB["ComponentAttributeBag"]
    REQ -.ähnliches API-Muster.-> SES["Session Store<br>has()/get()/only()/except() eigenständig implementiert"]
    REQ -.verwandter Bereich (keine direkte Abhängigkeit).-> VAL["ValidatesAttributes<br>Bewertungslogik für Validierung"]
```

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

<Steps>
  <Step title="Eine Daten-Containerklasse anlegen">
    ```php theme={null}
    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);
        }
    }
    ```
  </Step>

  <Step title="Über typisierte Accessor sicher lesen">
    ```php theme={null}
    $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
    ```
  </Step>
</Steps>

## 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

* [Macroable-Trait](/de/advanced/macroable)
* [Conditionable-Trait](/de/advanced/conditionable)
* [tap()-Helper und Tappable-Trait](/de/advanced/tap)


## Related topics

- [SessionEvent](/de/packages/laravel-copilot-sdk/session-event.md)
- [InteractsWithTime-Trait](/de/advanced/interacts-with-time.md)
- [Fluent-Klasse](/de/advanced/fluent.md)
- [Broadcasting](/de/broadcasting.md)
- [PHP-Attribute](/de/advanced/php-attributes.md)
