1. Conceptos de arquitectura
  2. Ciclo de Vida de la Solicitud

Introducción

Cuando utilizas cualquier herramienta en el "mundo real", te sientes más seguro si comprendes cómo funciona esa herramienta. El desarrollo de aplicaciones no es diferente. Cuando comprendes cómo funcionan tus herramientas de desarrollo, te sientes más cómodo y seguro usándolas.

El objetivo de este documento es proporcionarte una buena descripción general de alto nivel de cómo funciona el framework Laravel. Al conocer mejor el framework en general, todo se siente menos "mágico" y te sentirás más seguro construyendo tus aplicaciones. Si no comprendes todos los términos de inmediato, ¡no te desanimes! Intenta tener una comprensión básica de lo que está sucediendo, y tu conocimiento crecerá a medida que explores otras secciones de la documentación.

Resumen del ciclo de vida

Primeros pasos

El punto de entrada para todas las solicitudes a una aplicación Laravel es el archivo public/index.php. Todas las solicitudes 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 punto de partida para cargar el resto del framework.

El archivo index.php carga la definición del autoloader generada por Composer, y luego recupera una instancia de la aplicación Laravel desde bootstrap/app.php. La primera acción realizada por Laravel mismo es crear una instancia del contenedor de servicios de la aplicación.

Núcleos HTTP / Consola

A continuación, la solicitud entrante se envía al kernel HTTP o al kernel de consola, según el tipo de solicitud que ingresa a la aplicación. Estos dos kernels sirven como el lugar central por el que fluyen todas las solicitudes. Por ahora, centrémonos en el kernel HTTP, que se encuentra en app/Http/Kernel.php.

El kernel HTTP extiende la clase Illuminate\Foundation\Http\Kernel, que define un conjunto de "bootstrappers" que se ejecutarán antes de que se ejecute la solicitud. Estos "bootstrappers" configuran el manejo de errores, la configuración de registro, detectan el entorno de la aplicación y realizan otras tareas que deben hacerse antes de que se maneje la solicitud. Típicamente, estas clases manejan la configuración interna de Laravel de la que no necesitas preocuparte.

El kernel HTTP también define una lista de middleware HTTP por la que todas las solicitudes deben pasar antes de ser manejadas por la aplicación. Estos middleware manejan la lectura y escritura de la sesión HTTP, determinan si la aplicación está en modo de mantenimiento, verifican el token CSRF y más. Hablaremos más sobre esto pronto.

La firma del método handle del kernel HTTP es bastante simple: recibe una Request y devuelve una Response. Piensa en el kernel como una gran caja negra que representa toda tu aplicación. Alimenta solicitudes HTTP y devolverá respuestas HTTP.

Proveedores de servicios

Una de las acciones de inicio más importantes del kernel es cargar los proveedores de servicios para tu aplicación. Los proveedores de servicios son responsables de inicializar todos los diversos componentes del framework, como la base de datos, la cola, la validación y los componentes de enrutamiento. Todos los proveedores de servicios para la aplicación se configuran en la matriz providers del archivo de configuración config/app.php.

Laravel recorrerá esta lista de proveedores e instanciará cada uno de ellos. Después de instanciar los proveedores, se llamará al método register en todos los proveedores. Luego, una vez que todos los proveedores hayan sido registrados, se llamará al método boot en cada proveedor. Esto se hace para que los proveedores de servicios puedan depender de que todos los enlaces del contenedor estén registrados y disponibles en el momento en que se ejecute su método boot.

Básicamente, cada característica importante ofrecida por Laravel es inicializada y configurada por un proveedor de servicios. Dado que inicializan y configuran tantas características ofrecidas por el framework, los proveedores de servicios son el aspecto más importante de todo el proceso de arranque de Laravel.

Enrutamiento

Uno de los proveedores de servicios más importantes en tu aplicación es App\Providers\RouteServiceProvider. Este proveedor de servicios carga los archivos de ruta contenidos en el directorio routes de tu aplicación. ¡Adelante, abre el código de RouteServiceProvider y echa un vistazo a cómo funciona!

Una vez que la aplicación ha sido inicializada y todos los proveedores de servicios han sido registrados, la Request se entregará al enrutador para su despacho. El enrutador despachará la solicitud a una ruta o controlador, así como ejecutará cualquier middleware específico de la ruta.

Los middleware proporcionan un mecanismo conveniente para filtrar o examinar las solicitudes HTTP que ingresan a tu aplicación. Por ejemplo, Laravel incluye un middleware que verifica si el usuario de tu aplicación está autenticado. Si el usuario no está autenticado, el middleware redirigirá al usuario a la pantalla de inicio de sesión. Sin embargo, si el usuario está autenticado, el middleware permitirá que la solicitud avance más en la aplicación. Algunos middleware se asignan a todas las rutas dentro de la aplicación, como los definidos en la propiedad $middleware de tu kernel HTTP, mientras que otros se asignan solo a rutas o grupos de rutas específicos. Puedes obtener más información sobre los middleware leyendo la documentación completa de middleware.

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

Finalizando

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

Finalmente, una vez que la respuesta viaja de vuelta a través del middleware, el método handle del kernel HTTP devuelve el objeto de respuesta y el archivo index.php llama al método send en la respuesta devuelta. El método send envía el contenido de la respuesta al navegador web del usuario. ¡Hemos terminado nuestro recorrido por todo el ciclo de vida de la solicitud de Laravel!

Enfocarse en los proveedores de servicios

Los proveedores de servicios son realmente la clave para inicializar una aplicación Laravel. La instancia de la aplicación se crea, los proveedores de servicios se registran y la solicitud se entrega a la aplicación inicializada. ¡Es realmente así de simple!

Tener un firme entendimiento de cómo se construye y arranca una aplicación Laravel a través de proveedores de servicios es muy valioso. Los proveedores de servicios predeterminados de tu aplicación se almacenan en el directorio app/Providers.

Por defecto, AppServiceProvider está bastante vacío. Este proveedor es un buen lugar para agregar la inicialización de tu aplicación y los enlaces del contenedor de servicios. Para aplicaciones grandes, es posible que desees crear varios proveedores de servicios, cada uno con una inicialización más granular para los servicios específicos utilizados por tu aplicación.