Introducción
Cuando usas una herramienta en el “mundo real”, entender cómo funciona te permite utilizarla con más confianza. En el desarrollo de aplicaciones ocurre lo mismo. Entender cómo funcionan tus herramientas de desarrollo te permite construir aplicaciones con más comodidad y seguridad. Esta página ofrece una visión general de alto nivel de cómo funciona el framework Laravel. Al comprender bien el framework, todo dejará de parecerte “magia” y aumentará tu confianza al construir aplicaciones.Ciclo de vida de una solicitud HTTP
Flujo general
Los primeros pasos
El punto de entrada de todas las solicitudes a una aplicación Laravel es el archivopublic/index.php. Cualquier solicitud es reenviada a este archivo mediante la configuración del servidor web (Apache / Nginx). El propio index.php apenas contiene código: es el punto de partida para cargar el resto del framework.
El archivo index.php carga la definición del autoloader generada por Composer y obtiene la instancia de la aplicación Laravel desde bootstrap/app.php. Lo primero que hace Laravel es crear la instancia de la aplicación / contenedor de servicios.
Kernel HTTP
A continuación, la solicitud recibida se envía al Kernel HTTP (Illuminate\Foundation\Http\Kernel). El procesamiento se realiza a través del método handleRequest de la instancia de la aplicación.
El Kernel HTTP define un array de bootstrappers que se ejecutan antes de que la solicitud sea atendida. Estos bootstrappers realizan lo siguiente:
- Configurar el manejo de errores
- Configurar el logging
- Detectar el entorno de la aplicación
- Otras tareas necesarias antes del procesamiento de la solicitud
handle del Kernel HTTP es sencilla: recibe una Request y devuelve una Response. Piensa en el kernel como una gran caja negra que representa toda la aplicación. Le pasas una solicitud HTTP y te devuelve una respuesta HTTP.
Service providers
Uno de los procesos más importantes del bootstrapping del kernel es cargar los service providers de la aplicación. Los service providers son responsables de inicializar los distintos componentes del framework, como la base de datos, las colas, la validación o el enrutamiento. Laravel itera sobre la lista de providers e instancia cada uno. Tras la instanciación, se invoca el métodoregister de todos ellos. A continuación, una vez registrados todos, se llama al método boot de cada uno. De este modo, cuando se ejecuta el método boot, todos los bindings del contenedor ya están registrados y disponibles.
Los service providers definidos por el usuario o de terceros se registran en el archivo
bootstrap/providers.php.Enrutamiento
Una vez que la aplicación se ha inicializado y todos los service providers están registrados, laRequest se entrega al enrutador para su despacho. El enrutador despacha la solicitud a una ruta o a un controlador, y ejecuta también los middlewares específicos de la ruta.
Los middlewares proporcionan un mecanismo cómodo para filtrar o inspeccionar las solicitudes HTTP que entran en la aplicación. Por ejemplo, Laravel incluye un middleware que comprueba si el usuario está autenticado. Si no lo está, el middleware lo redirige a la pantalla de inicio de sesión. Si lo está, permite que la solicitud continúe hacia el interior de la aplicación.
Cuando la solicitud pasa todos los middlewares asociados a la ruta coincidente, se ejecuta la ruta o el método del controlador y se devuelve una respuesta.
Devolución de la respuesta
Cuando la ruta o el método del controlador devuelve una respuesta, esta vuelve a través de los middlewares de la ruta hacia el exterior, dándoles la oportunidad de modificar o inspeccionar la respuesta que enviará la aplicación. Finalmente, cuando la respuesta ha atravesado los middlewares, el métodohandle del Kernel HTTP devuelve el objeto respuesta al método handleRequest de la instancia de la aplicación, que llama al método send sobre la respuesta devuelta. send envía el contenido de la respuesta al navegador web del usuario. Con esto termina el recorrido completo del ciclo de vida de la solicitud en Laravel.
Ciclo de vida de un comando de consola
Flujo general
Punto de entrada artisan
El punto de entrada de los comandos de consola es el archivoartisan en la raíz del proyecto. Al igual que con las solicitudes HTTP, se cargan el autoloader de Composer y la instancia de la aplicación Laravel.
Después, el control se pasa al kernel de consola a través del método handleCommand de la instancia de la aplicación.
Kernel de consola y ejecución de comandos
El kernel de consola, al igual que el HTTP, carga los service providers. Una vez que todos los providers están registrados e iniciados, se cargan los comandos del directorioapp/Console/Commands y se ejecuta el comando indicado.
- El archivo
artisancarga el autoloader de Composer - Se genera la instancia de la aplicación desde
bootstrap/app.php - El kernel de consola carga los service providers
- Se busca y ejecuta el comando
make:controller - Se devuelve el código de salida
Céntrate en los service providers
Los service providers son la verdadera clave para inicializar una aplicación Laravel. Se crea la instancia de la aplicación, se registran los service providers y la solicitud se entrega a la aplicación ya inicializada. Eso es todo. Comprender bien cómo se construye e inicializa una aplicación Laravel a través de los service providers es muy valioso. Los service providers definidos por el usuario se almacenan en el directorioapp/Providers.
El
AppServiceProvider por defecto está casi vacío. Este provider es el lugar ideal para añadir el bootstrapping propio de tu aplicación o los bindings del contenedor de servicios. En aplicaciones grandes se recomienda crear varios service providers, cada uno responsable de una porción específica de la inicialización de los servicios que utiliza la aplicación.Diferencia entre register y boot
Los service providers tienen dos métodos principales.| Método | Momento | Uso |
|---|---|---|
register | Se llama en todos los providers tras su instanciación | Solo para registrar bindings en el contenedor de servicios |
boot | Se llama tras completarse el register de todos los providers | View composers, listeners de eventos y otras inicializaciones |
Próximos pasos
Contenedor de servicios
Comprende la inyección de dependencias y el funcionamiento del contenedor de servicios.
Service providers
Aprende a usar los service providers para inicializar tu aplicación.