[已解决]关于中间件和控制器钩子执行顺序的问题

蛋奶走势

业务逻辑为,鉴权中间件处理鉴权,控制器钩子处理后续控制器需要的数据,测试之后,发现执行顺序和预想的不一致,环境配置如下图
插件版本

中间件配置

控制器基础钩子类

继承基础类的控制器

最后执行的顺序

按照预想,中间件应该是先于基础钩子类执行,但是测试的结果,基础钩子类却先执行了,然后又测试了不继承基础类,直接在控制器使用钩子,钩子函数的执行也是先于中间件,就有点搞不明白,想问下大家我是不是使用的姿势有问题

998 1 1
1个回答

walkor

原因

控制器钩子函数实际上就是利用全局中间件实现的,中间件执行顺序为 全局钩子中间件(触发钩子函数) -> user应用中间件UserAuth,所以这就是为什么先执行beforeAction,再执行UserAuth的原因。

解决办法

把全局钩子中间件改成user应用中间件,更改配置 config/plugin/webman/action-hook/middleware.php

return [
    '' => [
        ActionHook::class
    ]
];

改为

return [
    'user' => [
        ActionHook::class
    ]
];

这样执行顺序就是 user应用中间件UserAuth -> user应用钩子中间件(触发钩子函数)

年代过于久远,无法发表回答
🔝