Gestión Manual del Middleware Global Predeterminado de Laravel
Concepto
En esta lección, aprenderemos cómo gestionar manualmente la pila de middleware global en Laravel. Laravel proporciona una pila predeterminada de middlewares que se ejecutan en cada solicitud HTTP a tu aplicación. Sin embargo, en ciertas situaciones, puede que necesites personalizar esta pila para adaptarla a las necesidades específicas de tu proyecto. Gestionar manualmente los middlewares te permite añadir, modificar o eliminar middlewares según los requisitos de tu aplicación sin sobrescribir la configuración predeterminada de Laravel.
Dónde Escribir el Código
El código debe escribirse en bootstrap/app.php
. Este archivo es esencial para la configuración de la aplicación Laravel y es donde se registran los middlewares globales. Es importante **añadir o modificar** únicamente las partes necesarias sin eliminar la configuración existente para mantener la integridad de la aplicación.
Ejemplos de Código
use Illuminate\Foundation\Middleware\InvokeDeferredCallbacks;
use Illuminate\Http\Middleware\TrustHosts;
use Illuminate\Http\Middleware\TrustProxies;
use Illuminate\Http\Middleware\HandleCors;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;
use Illuminate\Http\Middleware\ValidatePostSize;
use Illuminate\Foundation\Http\Middleware\TrimStrings;
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;
// ... código existente ...
->withMiddleware(function (Middleware $middleware) {
$middleware->use([
InvokeDeferredCallbacks::class,
// TrustHosts::class,
TrustProxies::class,
HandleCors::class,
PreventRequestsDuringMaintenance::class,
ValidatePostSize::class,
TrimStrings::class,
ConvertEmptyStringsToNull::class,
// Agrega aquí tus middlewares personalizados si es necesario
]);
});
Explicación del Código
En el ejemplo anterior, estamos gestionando manualmente la pila de middleware global de Laravel utilizando el método withMiddleware
. A continuación, desglosamos cada parte del código:
- use Illuminate\Foundation\Middleware\InvokeDeferredCallbacks;: Importa la clase
InvokeDeferredCallbacks
desde el espacio de nombresIlluminate\Foundation\Middleware
. Este middleware se encarga de invocar callbacks diferidos registrados durante la solicitud. - use Illuminate\Http\Middleware\TrustHosts;: Importa la clase
TrustHosts
, que permite definir qué nombres de host son de confianza para la aplicación. Está comentado por defecto y puede activarse si se requieren configuraciones específicas de hosts de confianza. - use Illuminate\Http\Middleware\TrustProxies;: Importa la clase
TrustProxies
, utilizada para manejar proxies y asegurar que la aplicación confíe en las cabeceras de los proxies. Es esencial para aplicaciones que se despliegan detrás de proxies reversos. - use Illuminate\Http\Middleware\HandleCors;: Importa la clase
HandleCors
, que maneja las solicitudes CORS (Cross-Origin Resource Sharing), permitiendo que tu aplicación acepte solicitudes de diferentes dominios. Esto es crucial para APIs que consumen recursos desde distintos orígenes. - use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance;: Importa la clase
PreventRequestsDuringMaintenance
, que previene que se realicen solicitudes a la aplicación durante el modo de mantenimiento. Es útil para mantener la integridad de la aplicación mientras se realizan actualizaciones. - use Illuminate\Http\Middleware\ValidatePostSize;: Importa la clase
ValidatePostSize
, utilizada para validar el tamaño de las solicitudes POST, asegurando que no excedan un límite específico. Esto ayuda a prevenir sobrecargas y posibles ataques de denegación de servicio. - use Illuminate\Foundation\Http\Middleware\TrimStrings;: Importa la clase
TrimStrings
, que recorta los espacios en blanco de las cadenas de texto en las solicitudes. Esto garantiza que los datos recibidos estén limpios y en el formato esperado. - use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;: Importa la clase
ConvertEmptyStringsToNull
, que convierte las cadenas vacías en valores nulos. Esto es útil para la validación de datos y para mantener la consistencia de los datos en la base de datos. - ->withMiddleware(function (Middleware $middleware) { … });: Utiliza el método
withMiddleware
para gestionar la pila de middleware global. La función de cierre recibe un objeto$middleware
, que es una instancia deIlluminate\Foundation\Configuration\Middleware
, encargada de gestionar todos los middlewares asignados a las rutas de la aplicación. - $middleware->use([…]);: El método
use
define un conjunto de middlewares que se ejecutarán en cada solicitud HTTP. En este caso, se está proporcionando una lista de middlewares que Laravel ejecutará. **Nota importante:** No se están eliminando los middlewares predeterminados; solo se está gestionando manualmente la pila existente para permitir futuras personalizaciones. - // TrustHosts::class,: Esta línea está comentada, lo que indica que el middleware
TrustHosts
no se está utilizando actualmente. Puedes descomentarla si necesitas definir hosts de confianza específicos para tu aplicación.
Visualización Gráfica en Pantalla
Cuando configuras manualmente la pila de middleware global y realizas una solicitud HTTP, por ejemplo, accediendo a una URL como http://www.conozcalaravel.test
, los middlewares se ejecutarán en el orden definido. En la consola de Visual Studio Code (VSC), podrías ver algo como esto:
GET http://www.conozcalaravel.test/api/resource
Status: 200 OK
Esto indica que la solicitud se ha procesado correctamente y que los middlewares definidos han sido ejecutados en el orden especificado. Si alguno de los middlewares devuelve un error, la solicitud puede ser interrumpida y se devolverá un código de estado correspondiente, como 401 (Unauthorized) si el token no es válido.
Conclusión
Gestionar manualmente la pila de middleware global en Laravel te proporciona un control detallado sobre el comportamiento de tu aplicación en cada solicitud. Al poder añadir, eliminar o modificar middlewares según las necesidades específicas de tu proyecto, aseguras que tu aplicación funcione de manera eficiente y segura. **Es esencial** entender el propósito de cada middleware para utilizarlos de manera efectiva y mantener la integridad y el rendimiento de tu aplicación.
Enlaces
Para más información, visita la página oficial de Laravel: Laravel Middleware Documentation
También puedes ver Laravel en español en: Conozca Laravel
Etiqueta:Middleware