尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Route 中间件组 3 步讲透:定义、挂载、执行顺序一篇搞懂

Route 中间件组 3 步讲透:定义、挂载、执行顺序一篇搞懂 Route 中间件组 3 步讲透定义、挂载、执行顺序一篇搞懂【免费下载链接】LiquidSwipeExample of using SwiftUI to create a beautiful Liquid Swipe control项目地址: https://gitcode.com/gh_mirrors/liq/LiquidSwipe你项目里 10 条 /api 路由每条后面都复制了一份认证 限流 CORS的中间件列表。现在要加个日志中间件10 处全得翻漏一处就出事故。这就是 Route 中间件组要干掉的事把一串中间件打包成组名想在哪生效就挂到哪。一句话讲透中间件组到底是什么中间件组就是给一串中间件起的套餐名先用 defineMiddlewareGroup 把几个中间件按顺序装进命名集合之后在路由器、路由组或单条路由上报这个组名整组一次挂上。类比健身房点一个增肌套餐教练按固定顺序排好一整组器械不用你每次单独挑。跟着敲一遍定义并挂上中间件组第一步定义组。列表顺序就是执行顺序?php declare(strict_types1); $router new League\Route\Router; // 起个组名把中间件按顺序装进去 $router-defineMiddlewareGroup(api, [ Acme\AuthMiddleware::class, // 先认证 Acme\ThrottleMiddleware::class, // 再限流 Acme\CorsMiddleware::class, ]);第二步挂到路由组// 整组挂到 /api/v1 下的所有路由 $router-group(/api/v1, function ($group) { $group-get(/users, UserController::index); $group-post(/users, UserController::store); })-middlewareGroup(api);中间件组用法就这两个动作先 define后挂。挂载点有三个单条路由、路由组、整个路由器想让某组对所有路由生效直接在 $router 上调 middlewareGroup(api)。到这里就能跑了/api/v1/users 的 GET 和 POST 都会按认证 → 限流 → CORS过一遍。请求到底经过谁执行顺序一次说清一个请求打进来中间件按固定层级走路由器级直接挂在 $router 上的中间件最先执行路由组级路由组上挂的中间件、中间件组整组执行单路由级那条路由自己挂的中间件最后执行 中间件组不改变这个层级它只是把同一层的中间件按你 define 时的顺序成组放行。响应返回时按相反顺序往外走。中间件执行顺序想清楚再改组、加组就不慌。顺序反了会有真问题限流排在认证前面未认证的流量也会先吃配额。两个最容易踩的坑⚠️ 以为连续挂两个组会互相覆盖。在同一个路由组上先后调 middlewareGroup(api) 和 middlewareGroup(web)两个组都生效按调用顺序叠加不是后者顶掉前者。想做api web的组合这正是你要的效果。⚠️ 用了组名却忘了先 define。调 middlewareGroup(api) 之前没定义过 api请求要么报错要么你以为挂了、实际啥都没拦。建议把所有 defineMiddlewareGroup 集中到启动文件先声明路由定义里只负责挂。组名起好、顺序排对以后改中间件只动一处。想动手试git clone https://gitcode.com/gh_mirrors/liq/LiquidSwipe更细的写法看 docs/unstable/middleware.md。【免费下载链接】LiquidSwipeExample of using SwiftUI to create a beautiful Liquid Swipe control项目地址: https://gitcode.com/gh_mirrors/liq/LiquidSwipe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表