*/ class Hook { /** * 执行行为 run方法是Behavior唯一的接口 * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function run() { if(defined('BIND_MODULE') && BIND_MODULE === 'install') return; $hook_plugins = Cache::get('hook_plugins'); $hooks = Cache::get('hooks'); $plugins = Cache::get('plugins'); if (!$hook_plugins) { // 所有钩子 $hooks = HookModel::where('status', 1)->column('status', 'name'); // 所有插件 $plugins = PluginModel::where('status', 1)->column('status', 'name'); // 钩子对应的插件 $hook_plugins = HookPluginModel::where('status', 1)->order('hook,sort')->select(); // 非开发模式,缓存数据 if (config('develop_mode') == 0) { Cache::set('hook_plugins', $hook_plugins); Cache::set('hooks', $hooks); Cache::set('plugins', $plugins); } } if ($hook_plugins) { foreach ($hook_plugins as $value) { if (isset($hooks[$value['hook']]) && isset($plugins[$value['plugin']])) { \think\facade\Hook::add($value['hook'], get_plugin_class($value['plugin'])); } } } } }