Cosa sono i Support Contracts
Illuminate\Contracts\Support raccoglie interfacce piccole ma importanti, usate in tutto Laravel.In particolare
Arrayable / Jsonable / Htmlable / Responsable sono i pattern di base per far integrare naturalmente Value Object, DTO e response object nel flusso esistente di Laravel.
Le firme mostrate qui fanno riferimento al codice sorgente ufficiale di Laravel 13.x (
laravel/framework).1) Arrayable
Definizione dell’interfaccia
Esempio di implementazione
Utilizzo nel core di Laravel
Illuminate\Database\Eloquent\ModelimplementaArrayablee forniscetoArray()Illuminate\Http\JsonResponse::setData(), se rileva unArrayable, serializza conjson_encode($data->toArray(), ...)
Aspetti utili nello sviluppo di pacchetti
- Puoi uniformare il formato di DTO e Value Object in controller, resource e log
- Concentri sull’oggetto stesso la responsabilità della conversione in
array
2) Jsonable
Definizione dell’interfaccia
Esempio di implementazione
Utilizzo nel core di Laravel
Modelimplementa ancheJsonablee forniscetoJson($options = 0)JsonResponse::setData()privilegia il controllo diJsonablee usatoJson()
Aspetti utili nello sviluppo di pacchetti
- Puoi fissare in modo rigoroso la struttura JSON per audit log e invii webhook
- Puoi esplicitare la rappresentazione JSON che serve al dominio, senza affidarti a
json_encode()
3) Htmlable
Definizione dell’interfaccia
Esempio di implementazione
Utilizzo nel core di Laravel
Illuminate\Support\HtmlStringimplementaHtmlable- L’helper
e(), se l’argomento èHtmlable, restituisce il risultato ditoHtml()(senza rieseguire l’escape)
Aspetti utili nello sviluppo di pacchetti
- Chiarisci il confine di responsabilità quando passi frammenti HTML in modo sicuro dentro Blade
- Anche negli scenari con
{!! $obj !!}è più semplice gestire l’output come oggetto
4) Responsable
Definizione dell’interfaccia
Esempio di implementazione
Utilizzo nel core di Laravel
Illuminate\Routing\Router::toResponse()verifica per prima cosaResponsablee chiama$response->toResponse($request)Illuminate\Http\Resources\Json\JsonResourceimplementaResponsable, quindi puoi fare direttamentereturn UserResource::make($user);da un controller
Aspetti utili nello sviluppo di pacchetti
- Nel controller eviti di comporre array e deleghi la generazione della risposta a un oggetto
- Facilita un design in cui “restituisci direttamente un DTO”, separando meglio la rappresentazione HTTP da quella di dominio
Guida alla scelta
Vuoi convertire i dati in array e riutilizzarli
Implementa
Arrayable e centralizza in toArray() la logica di normalizzazione.Vuoi controllare la rappresentazione JSON
Implementa
Jsonable ed esplicita il formato di output in toJson($options).Vuoi trattarlo come frammento HTML
Implementa
Htmlable e restituisci la stringa da renderizzare in toHtml().Pagine da leggere successivamente
Trait Macroable
Impara il pattern di estensione per aggiungere metodi personalizzati a classi esistenti.
Trait Conditionable
Impara a progettare l’inserimento di rami condizionali con
when() / unless().Helper tap() / Tappable
Impara il design di catene che intercalano side effect restituendo comunque il valore.
Trait Dumpable
Impara la tecnica di debug che integra
dump() / dd() negli oggetti.