每个 Laravel 请求都通过单一的 front controller public/index.php 进入,由 HTTP Kernel 驱动,经过一个 middleware 栈和 router 到达一个 controller,并返回一个 Response——之后 middleware 运行。
public/index.php ── autoload + bootstrap 应用
▼
HTTP Kernel::handle($request)
▼
Bootstrappers ── env, config, providers (register + boot)
▼
Global middleware ── (TrustProxies, HandleCors, ...)
▼
Router dispatch ── 匹配 route
▼
Route / group middleware ── (auth, throttle, verified, ...)
▼
Controller (或 closure) ── 你的逻辑 → 返回一个 Response
▼
Response ──▶ client
▼
Kernel::terminate ── terminable middleware (例如 session 保存, logging)
index.php 加载 Composer autoload 并 bootstrap 应用容器。Request 并运行 bootstrappers:加载 env + config,register 并 boot service providers(框架和你的 bindings 就是在这里连接起来的)。auth、throttle、verified)在 controller 之前运行;每个都可以短路。Response(view、JSON、redirect)。当响应向外冒泡返回时,middleware 的 "after" 逻辑运行。Kernel::terminate 运行 terminable middleware 处理延迟的工作。// app/Http/Middleware/Timing.php → 3/5. middleware
public function handle($request, Closure $next)
{
$request->attributes->set('started', microtime(true));
$response = $next($request); // 传递到下一层 / controller
$response->headers->set('X-Time', '...'); // "after" 逻辑
return $response;
}
// routes/web.php → 4. routing (+ middleware)
Route::get('/items/{id}', [ItemController::class, 'show'])->middleware('auth');
// app/Http/Controllers/ItemController.php → 6. controller
public function show(int $id)
{
return response()->json(Item::findOrFail($id));
}
Laravel 的 lifecycle 是围绕 service container 和 middleware pipeline 构建的,因此了解顺序——bootstrap/providers,然后 global middleware,然后 routing,然后 route middleware,然后 controller,然后 terminate——能准确告诉你 auth、rate limiting、CORS 和清理应该放在哪里。它解释了为什么一个 service 必须在被 inject 之前先在 provider 中 bind,为什么 throttle 会在你的 controller 运行之前拒绝一个请求,以及如何将缓慢的工作延迟到 terminable middleware,从而不让用户等待。
一个包含详细解答的 IT 面试题库——从初级到高级。
捐赠