Wat is de InteractsWithData-trait
Illuminate\Support\Traits\InteractsWithData is een trait die “een gemeenschappelijke API voor array-achtige invoerdata” bundelt.
De trait zelf vereist slechts twee abstracte methodes, all() en data(), en delegeert de logica voor het ophalen van de echte data aan elke klasse. In ruil daarvoor levert hij een verzameling veelgebruikte methodes:
- Bestaanscontrole:
has(),hasAny(),exists(),missing() - Leegtecontrole:
filled(),isNotFilled(),anyFilled() - Voorwaardelijke uitvoering:
whenHas(),whenFilled(),whenMissing() - Extractie:
only(),except() - Typeconversie:
string(),boolean(),integer(),float(),date(),enum(),collect()
Relatie met de Request-methodes
DeIlluminate\Http\Request die je via de request()-helper krijgt, neemt InteractsWithData op via Concerns\InteractsWithInput.
Daardoor wordt alledaagse toegang tot invoer zoals hieronder via de trait geleverd.
Request::get() is een Symfony-compatibele methode op de Request-klasse zelf. Ook in de broncode van Laravel 13 staat expliciet @deprecated use ->input() instead; de aanbevolen methode is input().
Belangrijkste implementaties in de Laravel-core
Klassen die InteractsWithData rechtstreeks gebruiken
Verwante implementaties met vergelijkbare verantwoordelijkheden
Illuminate\Session\Storeimplementeert zelf een vergelijkbare API methas(),get(),only(),except()enzovoortIlluminate\Validation\Concerns\ValidatesAttributeslevert de validatielogica; de invoertoegangs-API zelf is als een aparte verantwoordelijkheid vanInteractsWithDataontworpen
Relatie tussen de trait en de belangrijkste klassen
Inbouwen in eigen klassen bij pakketontwikkeling
InteractsWithData is geschikt voor klassen in een pakket die “een invoerarray bewaren en een Laravel-achtige ophaal-API willen bieden”.
1
Maak een datacontainerklasse
2
Lees veilig met getypeerde accessors
Praktische use cases
- Een option bag voor een externe API-client
- Een normalisatielaag voor webhook-payloads
- Een klasse die configuratie-overrides van een pakket oplost
all() en data() implementeert, hoef je de invoertoegangs-API niet telkens zelf te bouwen en houd je de onderhoudskosten laag.