小计
最近一直在使用Fastadmin进行新系统的开发,安装了一些官方插件,不过对一些具体业务逻辑需要进行调整,发现在插件的使用中,大量使用了Hook::listen,Hook::add这样的方法。
在上一篇博客中,对Hook的简单使用做了个简易的示范,可是发现插件中也使用了大量的Hook行为,却并没有在tags里声明,全盘搜索Hook::add,除了少数几个闭包函数,基本也没有用这个方法进行注册。
检查后发现,fastadmin-addon在初始化的时候应该是调用了
\vendor\karsonzhang\fastadmin-addons\src\common.php,其中75行左右可以看到如下代码
// 获取系统配置
$hooks = App::$debug ? [] : Cache::get('hooks', []);
if (empty($hooks)) {
$hooks = (array)Config::get('addons.hooks');
// 初始化钩子
foreach ($hooks as $key => $values) {
if (is_string($values)) {
$values = explode(',', $values);
} else {
$values = (array)$values;
}
$hooks[$key] = array_filter(array_map('get_addon_class', $values));
}
Cache::set('hooks', $hooks);
}
//如果在插件中有定义app_init,则直接执行
if (isset($hooks['app_init'])) {
foreach ($hooks['app_init'] as $k => $v) {
Hook::exec($v, 'app_init');
}
}
Hook::import($hooks, true);
从\application\extra\addons.php中获取了插件的hook配置,然后在这里进行递归注册
(顺便一提,百度查找Hook::import似乎没什么人用,
可以理解为Hook::add的批量方法,第二个参数为true,就增加,如果是false,就会舍弃数组中已有定义的方法)
个人理解,欢迎指正
注册之后,之前留下的钩子,就会执行响应的class中的方法
本文主要是为了调整用户邀请注册之后的积分赠送逻辑,后续购物返利,或相关逻辑都可以用类似方式增加钩子,也可以自己写一个Hook配置文件,然后用import方式批量注册自己的一些Hook方法