"name": "workerman/webman-framework",
"version": "v1.5.8",
多层Route::group,中间件规则应该是:
全局中间件 -》 应用中间件 -》 最外层 Route::group中间件 -》里层Route::group中间件 -》 Route::post等具体路由中间件
但实际的执行情况是:
全局中间件 -》 应用中间件 -》 Route::post等具体路由中间件 -》里层Route::group中间件 -》 最外层 Route::group中间件
也就是通过路由文件上配置的中间件执行顺序反过来了
Route::group('/toadmin', function () {
//权限相关模块
Route::group('/auth', function () {
//登录
Route::post('/login', [app\toadmin\controller\Index::class, 'index'])->middleware([new app\common\middleware\Auth(['toadmin', 'login'])]);
});
})->middleware([new app\common\middleware\Decryption(['toadmin'])]);
上面执行 /toadmin/auth/login 本意是先Decryption,然后Auth
执行结果是先Auth然后再到Decryption了
写个多层路由中间件即可复习
"name": "workerman/webman-framework",
"version": "v1.5.8",
##############处理################
vendor/workerman/webman-framework/src/App.php
219行 $routeMiddlewares = array_reverse($route->getMiddleware());
这里进行了反转,其实是不需要的,应该改为$routeMiddlewares = $route->getMiddleware();
执行顺序是倒过来的,
$middlewares = array_merge($middlewares, Middleware::getMiddleware($plugin, $app, $withGlobalMiddleware));
可以看出,合并全局和应用中间件的时候,是添加在数组后的
研究的真深
刚好用到,结果出现的预料外的情况而已
@walkor 大佬看下,确认的话,看看能否修复下,迁移的时候刚好用到
意思是老大写错代码了吗
估计是升级框架的时候没有改到
确实反了,感谢反馈。
修复了,执行
composer require workerman/webman-framework ^1.5.9
升级
👍👍👍