Skip to main content

Wat zijn Support Contracts?

In Illuminate\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\Model implementeert Arrayable en biedt toArray()
  • Als Illuminate\Http\JsonResponse::setData() een Arrayable detecteert, serialiseert die via json_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 array binnen het object zelf houden

2) Jsonable

Interface-definitie

Implementatievoorbeeld

Gebruiksvoorbeelden in de Laravel-core

  • Model implementeert ook Jsonable en biedt toJson($options = 0)
  • JsonResponse::setData() controleert eerst op Jsonable en gebruikt dan toJson()

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\HtmlString implementeert Htmlable
  • De e()-helper geeft toHtml() terug als het argument een Htmlable is (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
Concateneer binnen klassen die Htmlable implementeren gebruikersinvoer niet zomaar, maar escape de benodigde waarden eerst met e() voordat je ze insluit.

4) Responsable

Interface-definitie

Implementatievoorbeeld

Gebruiksvoorbeelden in de Laravel-core

  • Illuminate\Routing\Router::toResponse() controleert eerst op Responsable en roept $response->toResponse($request) aan
  • Illuminate\Http\Resources\Json\JsonResource implementeert Responsable, waardoor je vanuit een controller direct return 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.
Laatst gewijzigd op 6 september 2026