Cos’è il trait InteractsWithData
Illuminate\Support\Traits\InteractsWithData è un trait che raccoglie “un’API comune per dati di input di tipo array-like”.
Il trait richiede come metodi astratti solo all() e data() e delega la logica di recupero dei dati effettivi a ciascuna classe. In cambio fornisce, tutti insieme, i metodi di uso frequente elencati sotto.
- Verifica di esistenza:
has(),hasAny(),exists(),missing() - Verifica di valorizzazione:
filled(),isNotFilled(),anyFilled() - Esecuzione condizionata:
whenHas(),whenFilled(),whenMissing() - Estrazione:
only(),except() - Conversione di tipo:
string(),boolean(),integer(),float(),date(),enum(),collect()
Relazione con i metodi di Request
L’Illuminate\Http\Request che ottieni dall’helper request() incorpora InteractsWithData tramite Concerns\InteractsWithInput.
Per questo motivo, i seguenti accessi quotidiani agli input sono forniti attraverso il trait.
Request::get() è un metodo compatibile con Symfony che risiede nella classe Request stessa. Anche nel codice sorgente di Laravel 13 è annotato con @deprecated use ->input() instead e la raccomandazione è input().
Principali implementazioni nel core di Laravel
Classi che usano direttamente InteractsWithData
Implementazioni con responsabilità simili
Illuminate\Session\Storeimplementa autonomamente API analoghe comehas(),get(),only(),except()Illuminate\Validation\Concerns\ValidatesAttributesfornisce la logica di validazione: l’API di accesso agli input è progettata come responsabilità separata daInteractsWithData
Relazione tra il trait e le classi principali
Integrarlo in una tua classe durante lo sviluppo di un pacchetto
InteractsWithData è adatto a classi di un pacchetto che devono “trattenere un array di input e offrire un’API di accesso in stile Laravel”.
1
Crea una classe container per i dati
2
Leggi in sicurezza con accessor tipizzati
Casi d’uso pratici
- Option bag per client di API esterne
- Livello di normalizzazione dei payload webhook
- Classe di risoluzione degli override di configurazione del pacchetto
all() e data() eviti di riscrivere ogni volta l’API di accesso agli input, riducendo i costi di manutenzione.