Laravel 请求周期
加载 composer 自动加载器
require __DIR__.'/../bootstrap/autoload.php';
获取 Application 应用对象
// 此 $app 对象贯穿全文$app = require_once __DIR__.'/../bootstrap/app.php';主要过程: 1. 设置基础路径 2. 基础绑定 3. 注册全局基础服务 4. 核心容器别名设置 5. 注册三个单例
获取 Kernel 对象
// 此 $kernel 对象为 Laravel 应用的枢纽,将会协调各部分之间的工作,完成请求$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);主要过程: 1. 注入应用对象 2. 注入事件对象 3. 注入路由集合对象 4. 注入路由对象 5. 将各中间件注入到路由对象
获取 Request 对象
$request = Illuminate\Http\Request::capture()主要过程: 1. 委托\Symfony\Component\HttpFoundation\Request组件,并注入全局变量(封装成相应的对象),创建基础请求对象 2. 通过基础请求对象创建 $request
处理 Request 对象,返回 Response 对象
$response = $kernel->handle( $request = Illuminate\Http\Request::capture());主要过程: 1. 注入请求对象($request) 2. 根据配置项设置应用的运行环境(包括加载设置系统环境变量、加载配置文件、设置系统错误异常、设置 Facade、注册配置项的服务提供者、启动服务提供者的引导项)并触发相应的事件 3. 处理全局中间件 4. 路由解析(请求分发、路由查找、路由匹配、路由分离器设置、事件分发、路由执行) 5. 通过路由解析返回的 content 创建 $response 对象 6. 设置 $response 对象的响应头
发送响应
$response->send();
执行后续操作
$kernel->terminate($request, $response);主要过程: 1. 获取中间件,并尝试触发每个中间件的 terminate 方法 2. 触发 terminate 的事件