在 Laravel 9.x 中注册全局中间件需将其类完整命名空间添加到 Kernel.php 的 $middleware 数组中,如 \App\Http\Middleware\LogRequestTime::class,确保类存在且 handle() 中调用 $next($request),它将作用于所有 HTTP 请求。

在 Laravel 9.x 中注册全局中间件,就是让该中间件对**所有 HTTP 请求**(包括 web 和 api 路由)都生效。关键操作是在 app/Http/Kernel.php 文件的 $middleware 数组中添加中间件类的完整命名空间路径。
确认中间件类已存在
确保你的中间件类已经创建,例如:
- 使用命令生成:
php artisan make:middleware LogRequestTime - 类文件位于
app/Http/Middleware/LogRequestTime.php - 类中
handle()方法逻辑完整,并正确调用return $next($request);放行请求
在 Kernel.php 中注册为全局中间件
打开 app/Http/Kernel.php,找到 $middleware 属性(不是 $middlewareGroups 或 $routeMiddleware),在其数组中追加你的中间件类引用:
protected $middleware = [
\App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Fruitcake\Cors\HandleCors::class,
// ... 其他默认中间件
\App\Http\Middleware\LogRequestTime::class, // ← 添加这一行
];
注意:必须使用完整的类名(带命名空间),不能只写别名或简写。
验证是否生效
全局中间件会在每次请求时执行,无需额外路由绑定。你可以通过以下方式快速验证:
- 在
handle()方法开头加入info('LogRequestTime executed'); - 访问任意路由(如
/、/api/test、/login),查看 Laravel 日志(storage/logs/laravel.log)是否有对应记录 - 若无日志,检查类路径是否拼写错误、是否漏掉
\App\Http\Middleware\前缀、是否误加到了$middlewareGroups['web']等其他数组中
注意事项
全局中间件影响范围最广,务必谨慎使用:
- 避免在其中执行耗时操作(如数据库查询、远程 API 调用),否则会拖慢所有请求
- 不要在全局中间件里依赖 session 或 auth —— 它可能在未启动 session 的 API 请求中报错;如需用户上下文,请改用分组中间件(如
web组) - 若只需对部分请求生效(如仅 web 路由),应注册到
$middlewareGroups['web'],而非$middleware











