业务逻辑为,鉴权中间件处理鉴权,控制器钩子处理后续控制器需要的数据,测试之后,发现执行顺序和预想的不一致,环境配置如下图 插件版本 中间件配置
控制器基础钩子类
继承基础类的控制器
最后执行的顺序
按照预想,中间件应该是先于基础钩子类执行,但是测试的结果,基础钩子类却先执行了,然后又测试了不继承基础类,直接在控制器使用钩子,钩子函数的执行也是先于中间件,就有点搞不明白,想问下大家我是不是使用的姿势有问题
控制器钩子函数实际上就是利用全局中间件实现的,中间件执行顺序为 全局钩子中间件(触发钩子函数) -> user应用中间件UserAuth,所以这就是为什么先执行beforeAction,再执行UserAuth的原因。
全局钩子中间件(触发钩子函数)
user应用中间件UserAuth
beforeAction
UserAuth
把全局钩子中间件改成user应用中间件,更改配置 config/plugin/webman/action-hook/middleware.php
config/plugin/webman/action-hook/middleware.php
return [ '' => [ ActionHook::class ] ];
改为
return [ 'user' => [ ActionHook::class ] ];
这样执行顺序就是 user应用中间件UserAuth -> user应用钩子中间件(触发钩子函数)
user应用钩子中间件(触发钩子函数)
好的,感谢walkor大佬,问题已解决
这个坑有点大啊大佬
原因
控制器钩子函数实际上就是利用全局中间件实现的,中间件执行顺序为
全局钩子中间件(触发钩子函数)
->user应用中间件UserAuth
,所以这就是为什么先执行beforeAction
,再执行UserAuth
的原因。解决办法
把全局钩子中间件改成user应用中间件,更改配置
config/plugin/webman/action-hook/middleware.php
改为
这样执行顺序就是
user应用中间件UserAuth
->user应用钩子中间件(触发钩子函数)
好的,感谢walkor大佬,问题已解决
这个坑有点大啊大佬