Qué es el trait InteractsWithData
Illuminate\Support\Traits\InteractsWithData es un trait que reúne una «API común para trabajar con datos de entrada tipo array».
Este trait solo requiere dos métodos abstractos (all() y data()) y delega la lógica de obtención de datos reales a cada clase. A cambio, ofrece de forma unificada métodos de uso frecuente como los siguientes:
- Comprobación de existencia:
has(),hasAny(),exists(),missing(). - Comprobación de si está informado:
filled(),isNotFilled(),anyFilled(). - Ejecución condicional:
whenHas(),whenFilled(),whenMissing(). - Extracción:
only(),except(). - Conversión de tipos:
string(),boolean(),integer(),float(),date(),enum(),collect().
Relación con los métodos de Request
ElIlluminate\Http\Request que obtienes con el helper request() incorpora InteractsWithData a través de Concerns\InteractsWithInput.
Por eso, accesos cotidianos a la entrada como estos se resuelven vía el trait.
Request::get() es un método de compatibilidad con Symfony que existe en la propia clase Request. En el código fuente de Laravel 13 está marcado explícitamente como @deprecated use ->input() instead; se recomienda input().
Principales ejemplos de uso en el core de Laravel
Clases que hacen use directamente de InteractsWithData
| Clase | Uso |
|---|---|
Illuminate\Http\Concerns\InteractsWithInput | API de acceso a la entrada de Request. |
Illuminate\Support\ValidatedInput | Wrapper del retorno de validated() / safe(). |
Illuminate\Support\Fluent | Operaciones fluent sobre valores de configuración o atributos arbitrarios. |
Illuminate\Support\UriQueryString | Operaciones sobre la query string de Uri. |
Illuminate\View\ComponentAttributeBag | Operaciones sobre los atributos de componentes Blade. |
Implementaciones relacionadas con responsabilidad similar
Illuminate\Session\Storeimplementa por su cuenta APIs parecidas comohas(),get(),only(),except().Illuminate\Validation\Concerns\ValidatesAttributesofrece la lógica de comprobación de validación; la API de acceso a la entrada en sí está diseñada como una responsabilidad separada deInteractsWithData.
Relación entre el trait y las clases principales
Integrarlo en tus propias clases al desarrollar paquetes
InteractsWithData es adecuado para clases dentro de un paquete que «guardan un array de entrada y quieren ofrecer una API de acceso al estilo Laravel».
Casos de uso prácticos
- Bolsa de opciones para un cliente de una API externa.
- Capa de normalización de payloads de webhooks.
- Clase que resuelve las sobrescrituras de configuración de un paquete.
all() y data(), evitas rescribir cada vez la API de acceso a los datos de entrada, con lo que reduces el coste de mantenimiento.