Laravel请求生命周期从public/index.php开始,依次加载自动加载器、创建应用实例、初始化HTTP内核并引导系统环境,随后通过中间件管道预处理请求,再由路由器匹配路由规则并调度对应控制器方法,执行业务逻辑后将返回值转换为Response对象,设置响应头并发送至客户端,最后运行终止中间件完成请求处理。

当您向 Laravel 应用发起一个 HTTP 请求时,框架会经历一系列有序的步骤来处理该请求并返回响应。这些步骤构成了 Laravel 的请求生命周期,涵盖了从入口文件加载到服务容器初始化、路由分发、中间件执行以及最终响应返回的全过程。
本文运行环境:MacBook Pro,macOS Sonoma
一、启动自动加载与核心引导
请求首先由 web 服务器(如 Apache 或 Nginx)指向 public/index.php 文件,这是 Laravel 应用的唯一入口点。该文件负责引入 Composer 自动生成的自动加载器,并从项目根目录获取 Laravel 应用实例。
1、加载 Composer 的 autoload.php 文件,使 PHP 能够自动解析类的命名空间和依赖关系。
2、从 bootstrap/app.php 中创建并获取 Illuminate\Foundation\Application 实例,完成应用对象的初始化。
3、应用实例将用于后续绑定核心服务、注册服务提供者和启动 HTTP 内核。
二、内核初始化与请求传递
Laravel 使用 HTTP 内核(App\Http\Kernel)作为请求处理的核心中枢,负责启动应用环境、加载配置、注册中间件并分发请求。HTTP 内核继承自 Illuminate\Foundation\Http\Kernel,整合了框架的基本行为。
1、index.php 将请求传递给 HTTP 内核的 handle() 方法。
2、调用内核的 bootstrap() 方法,依次执行定义在 $bootstrappers 数组中的引导类,包括错误处理配置、日志系统加载、环境变量载入、服务提供者注册等。
3、通过这些引导程序确保应用处于可运行状态,例如 加载 .env 配置文件以设置运行环境。
三、中间件管道处理
在请求进入路由之前,Laravel 会通过全局中间件对请求进行预处理。中间件可用于身份验证、日志记录、CORS 控制等任务,形成一条“管道”结构来过滤请求。
1、HTTP 内核实例化一个中间件管道,并将请求传入其中。
2、按照 App\Http\Kernel 中定义的 $middleware 属性顺序逐一执行全局中间件。
3、若任一中间件拒绝请求(例如未授权),则直接返回响应并终止流程;否则继续向内传递。
四、路由匹配与调度
路由系统根据请求的 URI 和 HTTP 方法查找匹配的路由规则,并确定应调用的控制器方法或闭包函数。此过程由 Illuminate\Routing\Router 组件完成。
1、请求被送至 Router 实例,调用其 dispatch() 方法开始路由匹配。
2、遍历 RouteServiceProvider 加载的路由集合(通常位于 routes/web.php 或 routes/api.php)。
3、找到完全匹配的路由后,解析其关联的控制器动作或回调函数。
4、如果未找到匹配项,则抛出 Symfony\Component\HttpKernel\Exception\NotFoundHttpException 异常。
五、控制器方法执行
一旦路由成功匹配,Laravel 将通过服务容器解析控制器及其方法,并注入所需依赖。控制器负责业务逻辑处理并返回响应内容。
1、利用服务容器自动解析控制器类实例,实现依赖注入功能。
2、调用指定的方法,传入请求对象(Illuminate\Http\Request)作为参数。
3、执行业务逻辑,可能涉及数据库操作、事件触发、队列推送等操作。
4、方法返回值可以是字符串、视图、JSON 响应或 Response 实例。
六、响应准备与发送
控制器返回的结果会被转换为统一的 Symfony\Component\HttpFoundation\Response 实例,以便 Web 服务器正确输出。此阶段还包括会话写入、Cookie 设置等收尾工作。
1、Laravel 将控制器返回值封装成 HttpResponse 对象,支持多种格式如 JsonResponse、RedirectResponse 等。
2、调用 prepareResponse() 方法设置头部信息、状态码和内容类型。
3、执行 terminate 中间件(通过 Kernel 的 terminateMiddleware() 触发),允许在响应发送后运行耗时任务,如日志清理。
4、调用 send() 方法将响应内容输出至客户端浏览器。










