Laravel 8.x 中 API 路由中间件分组需完成注册、绑定、调用三步闭环:先在 Kernel.php 的 $middlewareGroups 中定义组(如 'api-secure'),仅含无参类名或正确拼接的带参字符串;再在 routes/api.php 中用 Route::middleware('api-secure')->group(...) 显式包裹路由;最后通过 php artisan route:list 验证 Middlewares 列是否显示该组名。

要在 Laravel 8.x 中为 API 路由正确设置中间件分组,关键不是“加几个中间件”,而是**注册、绑定、调用**三步闭环。漏掉任一环,中间件就不会执行——连报错都可能没有。
第一步:在 Kernel.php 中定义中间件组
打开 app/Http/Kernel.php,找到 $middlewareGroups 数组,在其中添加一个新组(比如叫 api-secure):
- 只放无参中间件类名字符串,例如:
EnsureFrontendRequestsAreStateful::class、ThrottleRequests::class . ':api' - 带参数的中间件(如
throttle:60,1)不能直接写进数组,必须用字符串拼接方式,否则会报 Class does not exist - 别把
auth:sanctum放这里——它是单体中间件,属于$routeMiddleware,不是组成员
第二步:在 routes/api.php 中绑定并调用该组
不能靠全局或隐式继承,必须显式调用:
- 用
Route::middleware('api-secure')->group(...)包裹你的路由 - 不要用旧式写法
Route::group(['middleware' => 'api-secure'], ...),Laravel 5.3+ 已废弃且不报错 - 若同时需要子域名(如
api.example.com),需配合Route::domain('api.example.com')使用,且顺序无关,但必须共存
第三步:确认生效与常见失效点
运行 php artisan route:list 查看对应路由的 Middlewares 列是否显示 api-secure:
- 没显示?检查是否拼错组名,或忘记在
$middlewareGroups中注册 - 显示了但逻辑没触发?可能是控制器方法不存在——中间件仍会执行,只是最后才报 Method does not exist
- 限流没生效?确认
ThrottleRequests的参数格式正确,且缓存驱动(如 Redis)可用
不复杂但容易忽略。



















