旧版 Laravel 中配置全局中间件需修改 Kernel.php 的 $middleware 数组,使用 ::class 语法添加中间件类,确保类存在且 handle 方法规范,顺序遵循洋葱模型,不可误加至 middlewareGroups 或 routeMiddleware。

旧版 Laravel(如 5.2–5.8)中配置全局中间件,核心就是修改 app/Http/Kernel.php 文件里的 $middleware 数组。
直接在 Kernel.php 中追加类名
打开 app/Http/Kernel.php,找到 protected $middleware = []; 这一行。数组里每一项都是一个中间件类的完整命名空间字符串,例如:
\App\Http\Middleware\TrustProxies::class\Illuminate\Session\Middleware\StartSession::class-
\App\Http\Middleware\CheckAge::class(你自己的中间件)
注意:必须使用 ::class 语法,不能写成字符串路径(如 'App\Http\Middleware\CheckAge'),否则会报错或不生效。
确保中间件类存在且 handle 方法规范
自定义中间件需用命令生成:php artisan make:middleware CheckAge,它会自动创建标准结构。重点检查 handle() 方法:
- 必须接收
$request和$next两个参数 - 逻辑分支后必须有
return $next($request);,否则请求中断 - 若要提前响应(如跳转、返回 JSON),直接
return response()->json(...)或return redirect(...)
顺序不能乱,尤其依赖基础中间件
旧版也遵循“洋葱模型”,执行顺序从上到下。常见依赖关系:
- 认证类(如
Authenticate::class)需放在StartSession::class和EncryptCookies::class之后 - 日志或监控类建议靠后,避免记录未完成的请求
- 修改请求体的中间件(如解析 JSON)必须在
TrimStrings::class之前,否则原始数据已被处理
别误加到 middlewareGroups 或 routeMiddleware
全局中间件只认 $middleware 数组。如果错加到:
-
$middlewareGroups(如web或api组)→ 只对对应路由组生效 -
$routeMiddleware(带别名的数组)→ 必须手动绑定到路由才起作用,不是全局
加错位置是旧版项目中最常导致“中间件不执行”的原因。











