.
QQ扫一扫联系
Laravel 的全生命周期是指框架从接收 HTTP 请求到返回响应的完整流程,涵盖启动、请求处理、响应生成和关闭四个阶段。以下是详细解析:
入口文件加载
请求从 public/index.php
开始,加载 Composer 自动加载器并创建 Laravel 应用实例。
代码示例: php
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
服务容器初始化
在 bootstrap/app.php
中创建服务容器,绑定核心组件(HTTP 内核、控制台内核等)。
关键操作:注册基础服务(如路由、日志)、配置目录路径、加载环境变量。
环境与服务注册
加载 .env
文件,配置应用环境。
注册门面(Facades)和服务提供者(Service Providers),如数据库、队列服务。
内核接管请求
HTTP 内核(HttpKernel
)的 handle()
方法接收请求,执行中间件和路由分发。
代码流程: php
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(Illuminate\Http\Request::capture());
中间件执行
全局中间件:如维护模式检查、CSRF 令牌验证。
路由中间件:根据路由定义执行特定中间件(如身份验证)。
示例中间件定义: php
// app/Http/Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
],
];
路由解析与控制器执行
匹配路由规则,调用控制器方法处理业务逻辑。
示例路由定义: php
Route::get('/user/{id}', [UserController::class, 'show']);
控制器处理请求并返回响应: php
class UserController extends Controller {
public function show($id) {
return view('user.profile', ['user' => User::find($id)]);
}
}
生成响应对象
控制器返回视图、JSON 或其他响应对象。
Blade 模板渲染示例: blade
¨K8K
¨K7K
发送响应
内核将响应发送回客户端,完成请求处理流程。
代码示例: php
$response->send();
终止中间件执行
执行中间件的 terminate()
方法,进行资源清理(如关闭数据库连接)。
示例终止中间件: php
namespace App\Http\Middleware;
class TerminateMiddleware {
public function terminate($request, $response) {
// 清理逻辑
}
}
服务容器清理
释放请求过程中占用的资源,准备迎接下一个请求。
服务容器:管理所有服务绑定和依赖注入,避免手动创建对象。
中间件:利用中间件实现请求过滤、日志记录等功能,避免在控制器中重复代码。
路由缓存:生产环境使用 php artisan route:cache
提升路由解析性能。
生命周期事件:通过监听 RequestHandled
等事件注入自定义逻辑(如统计请求耗时)。
Laravel 的生命周期通过服务容器、中间件和路由系统实现了高度可扩展的请求处理流程。开发者应重点关注中间件的合理使用、路由优化以及服务提供者的注册逻辑,以提升应用性能和可维护性。
.