Ciclo de vida de una solicitud

Introducción

Cuando se emplea cualquier herramienta en el "mundo real", te sentirás más confiado si entiendes cómo funciona dicha herramienta. El desarrollo de aplicaciones no es diferente. Cuando entiendes cómo funcionan tus herramientas de desarrollo, te sientes más cómodo y seguro a la hora de usarlas.

El objetivo de este documento es darte una visión de alto nivel de como el framework Laravel "funciona". Al conocer mejor el funcionamiento del framework en general, todo se siente menos "mágico" y te sentirás más seguro al construir tus aplicaciones.

Si no entiendes todos los términos en primera instancia, ¡no te desanimes!. Trata obtener una compresión básica de lo que está pasando, y tu conocimiento irá creciendo a medida que exploras otras secciones de la documentación.

Visión global del ciclo de vida

Lo primero

El punto de entrada de todas las peticiones a una aplicación Laravel es el archivo public/index.php. Todas las peticiones son dirigidas a este archivo por la configuración del servidor web (Apache / Nginx). El archivo index.php no contiene mucho código. Más bien, es un simple punto de entrada para cargar el resto del framework.

El archivo index.php carga la definición del autoloader generado por Composer y luego retorna una instancia de la aplicación de Laravel desde el script bootstrap/app.php. The first action taken by Laravel itself is to create an instance of the application / service container.

HTTP / Console Kernels

A continuación, la petición de entrada es enviada al núcleo HTTP o bien al núcleo de consola, dependiendo del tipo que sea dicha petición de entrada a la aplicación. Estos dos núcleos son el lugar central por el pasan todas las peticiones. Por ahora, vamos a centrarnos en el núcleo HTTP el cual está localizado en el archivo app/Http/Kernel.php.

El núcleo HTTP extiende de la clase Illuminate\Foundation\Http\Kernel, que define un array de configuraciones de arranque que serán lanzadas antes de que la petición sea ejecutada. These bootstrappers configure error handling, configure logging, detect the application environment, and perform other tasks that need to be done before the request is actually handled.

The HTTP kernel also defines a list of HTTP middleware that all requests must pass through before being handled by the application. These middleware handle reading and writing the HTTP session, determine if the application is in maintenance mode, verifying the CSRF token, and more.

The method signature for the HTTP kernel's handle method is quite simple: receive a Request and return a Response. Think of the Kernel as being a big black box that represents your entire application. Feed it HTTP requests and it will return HTTP responses.

Service Providers

One of the most important Kernel bootstrapping actions is loading the service providers for your application. All of the service providers for the application are configured in the config/app.php configuration file's providers array. First, the register method will be called on all providers, then, once all providers have been registered, the boot method will be called.

Service providers are responsible for bootstrapping all of the framework's various components, such as the database, queue, validation, and routing components. Since they bootstrap and configure every feature offered by the framework, service providers are the most important aspect of the entire Laravel bootstrap process.

Envío de la solicitud

Once the application has been bootstrapped and all service providers have been registered, the Request will be handed off to the router for dispatching. The router will dispatch the request to a route or controller, as well as run any route specific middleware.

Atención a los service providers

Los service providers son la clave del arranque de una aplicación Laravel. Se crea una instancia de la aplicación, se registran los service providers y se interpreta la solicitud con la aplicación ya arrancada. ¡Es así de fácil!

Tener un buen conocimiento de como se construye una aplicación Laravel y cómo esta arranca a través de los service providers es tremendamente útil. Por supuesto, los service providers por defecto de la aplicación, se almacenan en app/Providers.

De forma predeterminada, el AppServiceProvider está casi vacío. Este provider es un buen lugar para añadir los elementos de arranque de tu propia aplicación e incluso bindings del service container. Por supuesto, para aplicaciones grandes, puedes crear varios service providers más específicos.