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
| Classe | Scopo |
|---|---|
Illuminate\Http\Concerns\InteractsWithInput | API di accesso agli input di Request |
Illuminate\Support\ValidatedInput | Wrapper del valore di ritorno di validated() / safe() |
Illuminate\Support\Fluent | Manipolazione fluent di valori di configurazione o attributi arbitrari |
Illuminate\Support\UriQueryString | Manipolazione della query string di Uri |
Illuminate\View\ComponentAttributeBag | Manipolazione degli attributi dei componenti Blade |
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”.
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.