<?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,
]);
訪(fǎng)問(wèn)addFav時(shí),執(zhí)行順序?yàn)椋?br />
1--->app\middleware\ActionHook::class
2--->app\middleware\chkLogin::class
結(jié)束。
預(yù)期順序:
1--->app\middleware\AccessControl::class
2--->app\middleware\ActionHook::class
3--->app\middleware\userInfo::class
4--->app\middleware\chkLogin::class
不知道為什么會(huì)跳過(guò)部分中間件執(zhí)行,
其中AccessControl為跨域請(qǐng)求,請(qǐng)求類(lèi)型為option時(shí)返回對(duì)應(yīng)的,
測(cè)試的時(shí)候也發(fā)option過(guò)去,但返回404.
通過(guò)post的方式請(qǐng)求addFav,
執(zhí)行了
ActionHook<---執(zhí)行beforeAction和afterAction。確定執(zhí)行了。
chkLogin<----檢測(cè)登錄狀態(tài)用的,返回了未登錄。
被忽略了的userInfo 嘗試過(guò)了在里面輸入任意內(nèi)容,終端都沒(méi)有輸出,感覺(jué)就是沒(méi)被調(diào)用到。
Workerman version:4.0.19
Webman 1.0.0
找到問(wèn)題了。
AccessControl::class 沒(méi)執(zhí)行是因?yàn)?路由綁定的方式只有GET/POST,路由匹配不上,所以中間件沒(méi)執(zhí)行。
userInfo::class 沒(méi)被執(zhí)行是因?yàn)榻壎ǖ搅俗钔鈱拥膅roup,路由綁定中間件只支持執(zhí)行當(dāng)層的綁定,上一層的都不會(huì)被執(zhí)行。
解決方式:
1、存在跨域的需要執(zhí)行OPTION的不要綁定GET/POST,綁定any。
2、路由分多級(jí)組的話(huà),中間件只能綁定到最小的那個(gè)組,不能綁定上面的組