Laravel 11 中所有中间件注册必须统一在 bootstrap/app.php 中完成:全局中间件用 $middleware->use()、中间件组(web/api)须显式声明、路由中间件需先 alias 再调用,否则运行时报错。

在 Laravel 11 中,所有中间件注册必须统一在 bootstrap/app.php 中完成,旧版的 app/Http/Kernel.php 已被彻底移除。这不是可选项,而是强制约定——漏掉任何一项显式声明,运行时就会直接报错。
注册全局中间件(每次请求都执行)
用 $middleware->use([...]) 添加全站生效的中间件,比如日志、CSP 头、跨域处理等:
- 类名必须带完整命名空间,如
\App\Http\Middleware\AddHeaders::class - 确保类文件已加载(必要时运行
composer dump-autoload) - 顺序影响执行时机:靠前的中间件先执行,适合做请求预处理
声明中间件组(web / api)
web 和 api 不再是内置组,必须手动定义。否则路由里写 Route::middleware('api')->group(...) 会立刻抛出 Middleware group [api] does not exist:
-
$middleware->web([EnsureEmailIsVerified::class])是合法写法,数组可为空 -
$middleware->api([])也必须显式调用,哪怕不传中间件 - 不能省略
->api()就直接在路由中引用'api'别名
注册路由中间件别名(供路由或控制器调用)
不再支持 $routeMiddleware 自动映射。自定义中间件(如权限、角色)需先 alias,再使用:
- 在
withMiddleware()闭包内调用$middleware->alias([...]) - 例如集成 spatie/permission:
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class - 之后才能在路由中写
->middleware('role:admin')或控制器中用middleware('role:editor')
注意执行顺序与常见错误
链式调用的顺序本身不决定中间件执行顺序,但 append 和 prepend 参数会影响组内中间件的先后:
-
$middleware->web(append: [...])表示追加到默认 web 栈末尾 -
$middleware->web(prepend: [...])表示插入到最前面 - 别把中间件类名写成字符串(如
'App\Http\Middleware\Authenticate'),必须是::class形式 - 确认
routes.php已通过->withRouting(using: ...)正确引入,否则整个路由系统不启动
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











