Wat zijn Support Contracts?
InIlluminate\Contracts\Support zijn kleine maar belangrijke interfaces verzameld die in heel Laravel worden gebruikt.Vooral
Arrayable / Jsonable / Htmlable / Responsable zijn de basispatronen om value objects, DTO’s en responseobjecten op een natuurlijke manier in de bestaande flows van Laravel mee te laten draaien.
De signatures die we hier behandelen verwijzen naar de officiële broncode van Laravel 13.x (
laravel/framework).1) Arrayable
Interface-definitie
Implementatievoorbeeld
Gebruiksvoorbeelden in de Laravel-core
Illuminate\Database\Eloquent\ModelimplementeertArrayableen biedttoArray()- Als
Illuminate\Http\JsonResponse::setData()eenArrayabledetecteert, serialiseert die viajson_encode($data->toArray(), ...)
Toepassing in packageontwikkeling
- Je kunt DTO’s en value objects in een gemeenschappelijk formaat gieten voor controllers, resources en logoutput
- Je kunt de verantwoordelijkheid voor conversie naar een
arraybinnen het object zelf houden
2) Jsonable
Interface-definitie
Implementatievoorbeeld
Gebruiksvoorbeelden in de Laravel-core
Modelimplementeert ookJsonableen biedttoJson($options = 0)JsonResponse::setData()controleert eerst opJsonableen gebruikt dantoJson()
Toepassing in packageontwikkeling
- Je kunt de JSON-structuur strikt vastleggen voor bijvoorbeeld auditlogs en webhook-verzendingen
- Je legt de JSON-representatie vanuit je domein expliciet vast, in plaats van die aan
json_encode()over te laten
3) Htmlable
Interface-definitie
Implementatievoorbeeld
Gebruiksvoorbeelden in de Laravel-core
Illuminate\Support\HtmlStringimplementeertHtmlable- De
e()-helper geefttoHtml()terug als het argument eenHtmlableis (zonder opnieuw te escapen)
Toepassing in packageontwikkeling
- Je maakt de verantwoordelijkheidsgrens duidelijk voor het veilig doorgeven van HTML-fragmenten binnen Blade
- Ook waar je
{!! $obj !!}gebruikt, blijft de output makkelijk als object te beheren
4) Responsable
Interface-definitie
Implementatievoorbeeld
Gebruiksvoorbeelden in de Laravel-core
Illuminate\Routing\Router::toResponse()controleert eerst opResponsableen roept$response->toResponse($request)aanIlluminate\Http\Resources\Json\JsonResourceimplementeertResponsable, waardoor je vanuit een controller directreturn UserResource::make($user);kunt doen
Toepassing in packageontwikkeling
- Je kunt het genereren van de response delegeren aan een object, zonder in de controller arrays samen te stellen
- Het maakt het ontwerp “een DTO direct returnen” makkelijk en scheidt de HTTP-representatie van de domeinrepresentatie
Gids voor het kiezen van een implementatie
1
Je wilt data als array hergebruiken
Implementeer
Arrayable en centraliseer de normalisatielogica in toArray().2
Je wilt de JSON-representatie beheersen
Implementeer
Jsonable en maak het uitvoerformaat expliciet in toJson($options).3
Je wilt iets als HTML-fragment behandelen
Implementeer
Htmlable en geef de gerenderde string terug in toHtml().4
Je wilt direct een HTTP-response teruggeven
Implementeer
Responsable en centraliseer de verantwoordelijkheid in toResponse($request).Verder lezen
Macroable-trait
Leer het uitbreidingspatroon waarmee je eigen methodes toevoegt aan bestaande klassen.
Conditionable-trait
Leer het ontwerp waarin je met
when() / unless() conditionele logica inbouwt.tap() helper / Tappable
Leer het ketenontwerp dat een waarde teruggeeft terwijl je bijeffecten tussenvoegt.
Dumpable-trait
Leer de debugtechniek waarmee je
dump() / dd() in objecten inbouwt.