Qu’est-ce que le trait InteractsWithData
Illuminate\Support\Traits\InteractsWithData est un trait qui regroupe une « API commune pour des données d’entrée assimilables à un tableau ».
Ce trait n’exige que deux méthodes abstraites, all() et data(), et délègue la logique de récupération des données réelles à la classe qui l’utilise. En contrepartie, il fournit un ensemble de méthodes couramment utilisées :
- Vérification d’existence :
has(),hasAny(),exists(),missing() - Vérification de remplissage :
filled(),isNotFilled(),anyFilled() - Exécution conditionnelle :
whenHas(),whenFilled(),whenMissing() - Extraction :
only(),except() - Conversion de type :
string(),boolean(),integer(),float(),date(),enum(),collect()
Relation avec les méthodes de la Request
L’objetIlluminate\Http\Request obtenu via le helper request() intègre InteractsWithData via Concerns\InteractsWithInput.
Les accès quotidiens aux entrées sont donc fournis à travers ce trait :
Request::get() est une méthode compatible Symfony présente sur la classe Request. Dans le code source de Laravel 13, elle est explicitement marquée @deprecated use ->input() instead : la méthode recommandée est input().
Principales utilisations dans le cœur de Laravel
Classes utilisant directement InteractsWithData
| Classe | Rôle |
|---|---|
Illuminate\Http\Concerns\InteractsWithInput | API d’accès aux entrées de Request |
Illuminate\Support\ValidatedInput | Wrapper renvoyé par validated() / safe() |
Illuminate\Support\Fluent | Manipulation fluide de valeurs de configuration ou d’attributs arbitraires |
Illuminate\Support\UriQueryString | Manipulation de la chaîne de requête de Uri |
Illuminate\View\ComponentAttributeBag | Manipulation des attributs d’un composant Blade |
Implémentations aux responsabilités voisines
Illuminate\Session\Storeimplémente à sa manière une API similaire avechas(),get(),only(),except(), etc.Illuminate\Validation\Concerns\ValidatesAttributesfournit la logique de validation ; l’API d’accès aux entrées elle-même est conçue comme une responsabilité distincte deInteractsWithData.
Relations entre le trait et les classes principales
L’intégrer dans vos classes lors du développement d’un package
InteractsWithData convient parfaitement à une classe qui, dans votre package, doit « conserver un tableau d’entrée et exposer une API de récupération à la Laravel ».
Cas d’utilisation concrets
- Sacs d’options pour clients d’API externes
- Couche de normalisation de payloads de webhooks
- Classe de résolution de surcharges de configuration de package
all() et data(), vous évitez de réécrire à chaque fois une API d’accès aux entrées, ce qui réduit les coûts de maintenance.