<?php
return [
'' => [
app\middleware\AccessControl::class,
app\middleware\ActionHook::class,
],
];
<?php
Route::group('/front',function (){
Route::group('/v1',function (){
Route::group('/util',function (){
Route::get('/init.json',[app\controller\v1\util::class,'init']);
Route::post('/code2session',[app\controller\v1\util::class,'code2session']);
Route::post('/addFav',[app\controller\v1\util::class,'addFav'])->middleware([
app\middleware\chkLogin::class
]);
});
});
})->middleware([
app\middleware\userInfo::class,
]);
訪問addFav時,執(zhí)行順序為:
1--->app\middleware\ActionHook::class
2--->app\middleware\chkLogin::class
結(jié)束。
預期順序:
1--->app\middleware\AccessControl::class
2--->app\middleware\ActionHook::class
3--->app\middleware\userInfo::class
4--->app\middleware\chkLogin::class
不知道為什么會跳過部分中間件執(zhí)行,
其中AccessControl為跨域請求,請求類型為option時返回對應的,
測試的時候也發(fā)option過去,但返回404.
通過post的方式請求addFav,
執(zhí)行了
ActionHook<---執(zhí)行beforeAction和afterAction。確定執(zhí)行了。
chkLogin<----檢測登錄狀態(tài)用的,返回了未登錄。
被忽略了的userInfo 嘗試過了在里面輸入任意內(nèi)容,終端都沒有輸出,感覺就是沒被調(diào)用到。
Workerman version:4.0.19
Webman 1.0.0
找到問題了。
AccessControl::class 沒執(zhí)行是因為 路由綁定的方式只有GET/POST,路由匹配不上,所以中間件沒執(zhí)行。
userInfo::class 沒被執(zhí)行是因為綁定到了最外層的group,路由綁定中間件只支持執(zhí)行當層的綁定,上一層的都不會被執(zhí)行。
解決方式:
1、存在跨域的需要執(zhí)行OPTION的不要綁定GET/POST,綁定any。
2、路由分多級組的話,中間件只能綁定到最小的那個組,不能綁定上面的組