AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
前提:必须定义一个行为类: ~~~ namespace app\index\behavior; class Test { public function run(&$params) { // 行为逻辑 } } ~~~ 如果不定义的化可以在add定义闭包函数 ~~~ Hook::listen('action_init',$params); Hook::add('run',function($params){ var_dump($params); }); ~~~ 注册(绑定)行为类 ~~~ // 注册 app\index\behavior\Test 行为类到run标签位 Hook::add('run','app\\index\\behavior\\Test '); // 注册 app\index\behavior\CheckLang行为类到app_init标签位 Hook::add('app_init','app\\index\\behavior\\CheckLang'); //注册 app\admin\behavior\CronRun行为类到app_init标签位 Hook::add('app_init','app\\admin\\behavior\\CronRun'); //批量注册(绑定) Hook::add('app_init',['app\\index\\behavior\\CheckAuth','app\\index\\behavior\\CheckLang']); ~~~ 如果不想使用add动态注册(绑定),则我们可以在tags.php中进行注册(绑定) ~~~ return [ 'app_init'=> [ 'app\\index\\behavior\\CheckAuth', 'app\\index\\behavior\\CheckLang' ], 'app_end'=> [ 'app\\admin\\behavior\\CronRun' ] ] ~~~ 然后再每个想要的地方进行监听。如支付成功后,注册成功后,登录成功后等等位置后加上listen ``` Hook::listen('action_init',$params); ``` ## **方法一览** ``` /** * 监听标签的行为 * @access public * @param string $tag 标签名称 * @param mixed $params 传入参数 * @param bool $once 只获取一个有效返回值 * @return mixed */ \think\facade\Hook::listen($tag, $params = null, $once = false) Hook::listen($hook_name, [ 'hook_name' => $hook_name, 'is_backend' => true, 'params' => $this->out_params, 'data' => &$this->form_data, ]);//这个$params就是behavior文件夹下定义的类的入口方法的参数 /** * 动态添加行为扩展到某个标签(绑定) * @access public * @param string $tag 标签名称 * @param mixed $behavior 行为名称 * @param bool $first 是否放到开头执行 * @return void */ \think\facade\Hook::add($tag, $behavior, $first = false) /** * 执行行为 * @access public * @param mixed $class 行为 * @param mixed $params 参数 * @return mixed */ \think\facade\Hook::exec($class, $params = null) // 执行 app\index\behavior\CheckAuth行为类的run方法 并引用传入params参数 $result = Hook::exec('app\\index\\behavior\\CheckAuth','run',$params); \think\facade\Hook::portal('run');//修改行为类的入口方法 /** * 指定行为标识 便于调用 * @access public * @param string|array $name 行为标识 * @param mixed $behavior 行为 * @return $this */ \think\facade\Hook::alias($name, $behavior = null) /** * 批量导入插件 * @access public * @param array $tags 插件信息 * @param bool $recursive 是否递归合并 * @return void */ \think\facade\Hook::import(array $tags, $recursive = true) /** * 获取插件信息 * @access public * @param string $tag 插件位置 留空获取全部 * @return array */ \think\facade\Hook::get($tag = '') /** * 执行某个标签的行为 * @access protected * @param mixed $class 要执行的行为 * @param string $tag 方法名(标签名) * @param mixed $params 参数 * @return mixed */ protected execTag($class, $tag = '', $params = null) ```