業(yè)務(wù)邏輯為,鑒權(quán)中間件處理鑒權(quán),控制器鉤子處理后續(xù)控制器需要的數(shù)據(jù),測(cè)試之后,發(fā)現(xiàn)執(zhí)行順序和預(yù)想的不一致,環(huán)境配置如下圖
插件版本
中間件配置
控制器基礎(chǔ)鉤子類
繼承基礎(chǔ)類的控制器
最后執(zhí)行的順序
按照預(yù)想,中間件應(yīng)該是先于基礎(chǔ)鉤子類執(zhí)行,但是測(cè)試的結(jié)果,基礎(chǔ)鉤子類卻先執(zhí)行了,然后又測(cè)試了不繼承基礎(chǔ)類,直接在控制器使用鉤子,鉤子函數(shù)的執(zhí)行也是先于中間件,就有點(diǎn)搞不明白,想問(wèn)下大家我是不是使用的姿勢(shì)有問(wèn)題
控制器鉤子函數(shù)實(shí)際上就是利用全局中間件實(shí)現(xiàn)的,中間件執(zhí)行順序?yàn)?全局鉤子中間件(觸發(fā)鉤子函數(shù))
-> user應(yīng)用中間件UserAuth
,所以這就是為什么先執(zhí)行beforeAction
,再執(zhí)行UserAuth
的原因。
把全局鉤子中間件改成user應(yīng)用中間件,更改配置 config/plugin/webman/action-hook/middleware.php
return [
'' => [
ActionHook::class
]
];
改為
return [
'user' => [
ActionHook::class
]
];
這樣執(zhí)行順序就是 user應(yīng)用中間件UserAuth
-> user應(yīng)用鉤子中間件(觸發(fā)鉤子函數(shù))