"name": "workerman/webman-framework",
"version": "v1.5.8",
多層Route::group,中間件規(guī)則應(yīng)該是:
全局中間件 -》 應(yīng)用中間件 -》 最外層 Route::group中間件 -》里層Route::group中間件 -》 Route::post等具體路由中間件
但實(shí)際的執(zhí)行情況是:
全局中間件 -》 應(yīng)用中間件 -》 Route::post等具體路由中間件 -》里層Route::group中間件 -》 最外層 Route::group中間件
也就是通過(guò)路由文件上配置的中間件執(zhí)行順序反過(guò)來(lái)了
Route::group('/toadmin', function () {
//權(quán)限相關(guān)模塊
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'])]);
上面執(zhí)行 /toadmin/auth/login 本意是先Decryption,然后Auth
執(zhí)行結(jié)果是先Auth然后再到Decryption了
寫個(gè)多層路由中間件即可復(fù)習(xí)
"name": "workerman/webman-framework",
"version": "v1.5.8",
##############處理################
vendor/workerman/webman-framework/src/App.php
219行 $routeMiddlewares = array_reverse($route->getMiddleware());
這里進(jìn)行了反轉(zhuǎn),其實(shí)是不需要的,應(yīng)該改為$routeMiddlewares = $route->getMiddleware();
執(zhí)行順序是倒過(guò)來(lái)的,
$middlewares = array_merge($middlewares, Middleware::getMiddleware($plugin, $app, $withGlobalMiddleware));
可以看出,合并全局和應(yīng)用中間件的時(shí)候,是添加在數(shù)組后的