You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel依赖注入先于中间件执行的问题及合理性咨询

问题解答

为什么路由组中间件没先执行?

Laravel的路由模型绑定由SubstituteBindings中间件负责,这个中间件默认会在路由组中间件之前执行。请求的实际执行顺序是:
全局中间栈 → SubstituteBindings → 路由组中间件 → 控制器方法

所以当模型绑定失败(找不到对应记录)时,SubstituteBindings会直接抛出404异常,导致路由组中间件根本没机会运行。

你的做法是否正确、有必要?

把中间件通过$middleware->api(prepend: [MyMiddleware::class])加到全局API前置中间件的做法是可行的,但要不要这么做取决于中间件的职责:

  • 如果这个中间件是所有API请求都必须执行的逻辑(比如全局请求日志、基础权限校验、请求头初始化),那这么做完全合理,能确保它在所有环节之前运行。
  • 如果中间件只是针对该路由组的业务逻辑,那全局前置就没必要了——这会让所有API请求都走这个中间件,增加不必要的性能开销。

更合适的替代方案

如果只想让这个中间件在目标路由组的模型绑定前执行,不用放到全局中间件,可以调整中间件优先级:
在app/Http/Kernel.php里找到$middlewarePriority数组,把MyMiddleware::class放到SubstituteBindings::class的前面,示例代码如下:

protected $middlewarePriority = [
    \App\Http\Middleware\MyMiddleware::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    // 其他中间件...
];

这样即使是路由组里的中间件,也会在SubstituteBindings之前执行,就能避免模型绑定异常跳过中间件的问题。

内容的提问来源于stack exchange,提问作者Riza Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:42:08