Ciclo De Vida De La Request

Ciclo de vida de la request

First steps

El punto de entrada para todas las solicitudes a una aplicación Laravel es el archivo public/index.php. Todas las solicitudes se dirigen a este archivo mediante la configuración de su servidor web (Apache/Nginx).

El index.php carga la definición del autoloader generada por Composer, y después devuelve una instancia de la aplicación de Laravel a partir de**bootstrap/app.php** . La primera acción realizada por el propio Laravel es crear una instancia del contenedor de aplicación/servicio.

Http/console kernels

A continuación, la solicitud entrante se envía al kernel HTTP o al kernel de la consola, utilizando los métodos handleRequest o handleCommand de la instancia de la aplicación, según el tipo de solicitud que ingresa a la aplicación.

Estos dos núcleos sirven como ubicación central a través de la cual fluyen todas las solicitudes. Por ahora, centrémonos únicamente en el kernel HTTP, que es una instancia de Illuminate\Foundation\Http\Kernel.

El kernel HTTP define una serie de boostrapers previos que se ejecutarán antes de que se ejecute la solicitud. Estos programas previos configuran el manejo de errores, configuran el registro, detectan el entorno de la aplicación y realizan otras tareas que deben realizarse antes de que se maneje realmente la solicitud. Normalmente, estas clases manejan la configuración interna de Laravel de la que no necesitas preocuparte.

El kernel HTTP también es responsable de pasar la solicitud a través de la pila de middlewares de la aplicación. Estos middlewares manejan la lectura y escritura de la sesión HTTP, determina si la aplicación está en modo de mantenimiento, verifica el token CSRF y más.

El método clave es el método handler del kernel http : recibe una Solicitud y devuelve una Respuesta. Piense en el kernel como una gran caja negra que representa toda su aplicación. Entran solicitudes HTTP y devolverá respuestas HTTP.

Service Providers

Uno de los más importantes acciones a la hora del bootstrap es cargar los proveedores de servicios para la aplicación. Los proveedores de servicios son los responsables de inicializar todos los componentes del framework, como la base de datos, la cola, las validaciones y los componentes de enrutamiento.

Laravel iterará sobre la lista de los providers e instanciará cada uno de ellos. Después de instanciar los providers, el método register sera llamado en cada uno de ellos. Después de que cada provider sean registrados, se llamará al método boot para cada uno.

Esto se hace así para que los proveedores de servicios puedan depender de que todas las vinculaciones del contenedor estén registradas y disponibles para cuando se ejecute su método boot. Esto significa que en Laravel, los proveedores de servicios pueden necesitar acceder a las instancias de objetos u otros servicios que han sido registrados en el contenedor de servicios de la aplicación. Al llamar al método boot de un proveedor de servicio después de que se hayan registrado todos los proveedores y sus dependencias, se garantiza que todas las vinculaciones necesarias en el contenedor de servicios están disponibles para su uso. Esto permite que los proveedores de servicios inicialicen correctamente cualquier configuración adicional o realicen tareas que dependan de otros servicios dentro de la aplicación. En resumen, el método boot se ejecuta después de que todas las dependencias hayan sido registradas para asegurar que todo esté listo y funcione correctamente.

Esencialmente cada funcionalidad ofrecida por Laravel es inicializada y configurada por un service provider, por ello son los aspectos más importantes de laravel.

Mientras que el framework internamente usa decenas de proveedores de servicios, también tienes la posibilidad de crear los tuyos propios.

Puede encontrar una lista de los proveedores de servicios de terceros o definidos por el usuario propio en el archivo bootstrap/providers.php.

Routing

Una vez la aplicación ha sido lanzada y todos los proveedores de servicios hayan sido registrados, la petición será enviada al router para su dispatch. El router enviará la petición a una ruta o un controlador así como correr los middlewares para la ruta en especifico.

El middleware proporciona un mecanismo conveniente para filtrar o examinar las solicitudes HTTP que ingresan a su aplicación. Por ejemplo, Laravel incluye un middleware que verifica si el usuario de su aplicación está autenticado. Si el usuario no está autenticado, el middleware lo redireccionará a la pantalla de inicio de sesión. Sin embargo, si el usuario está autenticado, el middleware permitirá que la solicitud avance en la aplicación.

Algunos middleware se asignan a todas las rutas dentro de la aplicación, como PreventRequestsDuringMaintenance, mientras que otros solo se asignan a rutas o grupos de rutas específicos. Puede obtener más información sobre el middleware leyendo la documentación completa del middleware.

Si la solicitud pasa por todo el middleware asignado a la ruta coincidente, se ejecutará la ruta o el método del controlador y la respuesta devuelta por la ruta o el método del controlador se enviará de regreso a través de la cadena de middleware de la ruta.

Finishing up

Una vez que la ruta o el método del controlador devuelve una respuesta, la respuesta viajará hacia afuera a través del middleware de la ruta, dando a la aplicación la oportunidad de modificar o examinar la respuesta saliente.

Finalmente, una vez que la respuesta regresa a través del middleware, el método handle del kernel HTTP devuelve el objeto de respuesta al handleRequest de la instancia de la aplicación, y este método llama al método send en la respuesta devuelta. El método de envío envía el contenido de la respuesta al navegador web del usuario.

Focus on service providers

Los proveedores de servicios son verdaderamente la clave para iniciar una aplicación Laravel. Se crea la instancia de la aplicación, se registran los proveedores de servicios y la solicitud se entrega a la aplicación iniciada.

Es muy valioso tener una idea clara de cómo se construye y arranca una aplicación Laravel a través de proveedores de servicios. Los proveedores de servicios definidos por el usuario de su aplicación se almacenan en el directorio aplicación/Providers.

De forma predeterminada, AppServiceProvider está bastante vacío. Este proveedor es un excelente lugar para agregar los enlaces de contenedor de servicios y arranque propios de su aplicación. Para aplicaciones grandes, es posible que desee crear varios proveedores de servicios, cada uno con un arranque más granular para servicios específicos utilizados por su aplicación.