Skip to content

请求生命周期

介绍

在“现实世界”中使用任何工具时,如果了解该工具的工作原理,您会感到更加自信。应用程序开发也不例外。当您了解开发工具的功能时,您会感到更舒适和自信。

本文档的目标是为您提供一个关于 Laravel 框架如何“工作”的高层次概述。通过更好地了解整个框架,一切看起来就不那么“神奇”,您将更有信心构建应用程序。

如果您一开始不理解所有术语,不要灰心!只需尝试对正在发生的事情有一个基本的了解,随着您探索文档的其他部分,您的知识将会增长。

生命周期概述

首先

所有对 Laravel 应用程序的请求的入口点是 public/index.php 文件。所有请求都由您的 Web 服务器(Apache / Nginx)配置指向此文件。index.php 文件不包含太多代码。相反,它只是加载框架其余部分的起点。

index.php 文件加载 Composer 生成的自动加载器定义,然后从 bootstrap/app.php 脚本中检索 Laravel 应用程序的实例。Laravel 本身采取的第一个动作是创建应用程序/ 服务容器 的实例。

HTTP / 控制台内核

接下来,根据进入应用程序的请求类型,将传入请求发送到 HTTP 内核或控制台内核。这两个内核是所有请求流经的中心位置。现在,让我们专注于位于 app/Http/Kernel.php 的 HTTP 内核。

HTTP 内核扩展了 Illuminate\Foundation\Http\Kernel 类,该类定义了一组将在请求执行之前运行的 bootstrappers。这些引导程序配置错误处理、配置日志记录、检测应用程序环境,并执行在请求实际处理之前需要完成的其他任务。

HTTP 内核还定义了所有请求在被应用程序处理之前必须通过的 HTTP 中间件 列表。这些中间件处理读取和写入 HTTP 会话,确定应用程序是否处于维护模式,验证 CSRF 令牌 等。

HTTP 内核的 handle 方法的方法签名非常简单:接收一个 Request 并返回一个 Response。可以将内核视为代表整个应用程序的一个大黑盒。向其提供 HTTP 请求,它将返回 HTTP 响应。

服务提供者

内核引导操作中最重要的之一是加载应用程序的 服务提供者。应用程序的所有服务提供者都在 config/app.php 配置文件的 providers 数组中配置。首先,将调用所有提供者的 register 方法,然后,一旦所有提供者都已注册,将调用 boot 方法。

服务提供者负责引导框架的所有各种组件,例如数据库、队列、验证和路由组件。由于它们引导和配置框架提供的每个功能,服务提供者是整个 Laravel 引导过程的最重要方面。

分发请求

一旦应用程序已引导并且所有服务提供者都已注册,Request 将被交给路由器进行分发。路由器将请求分发到路由或控制器,并运行任何特定于路由的中间件。

专注于服务提供者

服务提供者确实是引导 Laravel 应用程序的关键。应用程序实例被创建,服务提供者被注册,请求被交给引导的应用程序。就是这么简单!

牢牢掌握 Laravel 应用程序如何通过服务提供者构建和引导是非常有价值的。当然,应用程序的默认服务提供者存储在 app/Providers 目录中。

默认情况下,AppServiceProvider 是相当空的。这个提供者是添加应用程序自己的引导和服务容器绑定的好地方。当然,对于大型应用程序,您可能希望创建多个服务提供者,每个提供者具有更细粒度的引导类型。