Que sont les Support Contracts
Illuminate\Contracts\Support regroupe de petites interfaces essentielles utilisées partout dans Laravel.En particulier,
Arrayable / Jsonable / Htmlable / Responsable sont les patterns de base qui permettent d’insérer naturellement Value Objects, DTO et objets de réponse dans les flux existants de Laravel.
Les signatures présentées ici proviennent des sources officielles de Laravel 13.x (
laravel/framework).1) Arrayable
Définition de l’interface
Exemple d’implémentation
Utilisations dans le cœur de Laravel
Illuminate\Database\Eloquent\ModelimplémenteArrayableet fournittoArray().Illuminate\Http\JsonResponse::setData()détecteArrayableet sérialise viajson_encode($data->toArray(), ...).
Intérêt pour le développement de packages
- Uniformiser le format des DTO et Value Objects dans les contrôleurs, ressources, journaux, etc.
- Enfermer dans l’objet la responsabilité de conversion en
array.
2) Jsonable
Définition de l’interface
Exemple d’implémentation
Utilisations dans le cœur de Laravel
Modelimplémente égalementJsonableet fournittoJson($options = 0).JsonResponse::setData()évalueJsonableen priorité et utilisetoJson().
Intérêt pour le développement de packages
- Fixer strictement la structure JSON pour les journaux d’audit, l’envoi de webhooks, etc.
- Expliciter la représentation JSON métier, sans dépendre du comportement de
json_encode().
3) Htmlable
Définition de l’interface
Exemple d’implémentation
Utilisations dans le cœur de Laravel
Illuminate\Support\HtmlStringimplémenteHtmlable.- Le helper
e()renvoietoHtml()si son argument est unHtmlable(sans ré-échapper).
Intérêt pour le développement de packages
- Clarifier la frontière de responsabilités lors du passage sûr de fragments HTML dans Blade.
- Faciliter la gestion de la sortie par objet, y compris là où on utilise
{!! $obj !!}.
4) Responsable
Définition de l’interface
Exemple d’implémentation
Utilisations dans le cœur de Laravel
Illuminate\Routing\Router::toResponse()évalue d’abordResponsableet appelle$response->toResponse($request).Illuminate\Http\Resources\Json\JsonResourceimplémenteResponsable: vous pouvez faire directementreturn UserResource::make($user);depuis un contrôleur.
Intérêt pour le développement de packages
- Éviter d’assembler les tableaux dans le contrôleur en déléguant la génération de la réponse à un objet.
- Faciliter le style « je retourne le DTO tel quel », en séparant représentation HTTP et représentation métier.
Guide de choix des implémentations
Vous voulez transformer en tableau pour réutilisation
Implémentez
Arrayable et concentrez la logique de normalisation dans toArray().Vous voulez maîtriser la représentation JSON
Implémentez
Jsonable et explicitez le format de sortie dans toJson($options).Vous voulez manipuler des fragments HTML
Implémentez
Htmlable et retournez la chaîne de rendu depuis toHtml().Pages à lire ensuite
Trait Macroable
Découvrez le pattern d’extension permettant d’ajouter des méthodes personnalisées aux classes existantes.
Trait Conditionable
Découvrez la conception de branchement conditionnel avec
when() / unless().Helper tap() / Tappable
Découvrez le pattern de chaînage renvoyant la valeur tout en glissant un effet de bord.
Trait Dumpable
Découvrez comment intégrer
dump() / dd() à vos objets pour le débogage.