ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 钩子 TookPHP框架提供了钩子处理机制,就是在某一个时机自动执行某些功能。 #### 配置钩子 a. 定义 Hook 配置项 b. 配置可以定义在应用或模块 config.php 文件中 *例:* ~~~ return array( 'Hook'=> array( 'TEST_HOOK' => array('Home\Hook\TestHook'), ), ); ~~~ *钩子文件, 路径: `Home\Hook\TestHook.class.php`* ~~~ namespace Home\Hook; class TestHook{ public function run(&$options){ header('Content-type:text/html;charset=utf-8'); echo '设置字符集UTF8'; } } ~~~ 在控制器中调用钩子 ~~~ namespace Home\Controller; class IndexController extends Controller { public function index() { Hook::listen('TEST_HOOK'); //代码将执行输出: 设置字符集UTF8 } } ~~~ #### 钩子处理类 a. 一个钩子可以指定多个处理类 b. 处理类可以定义在应用或模块的 Hook 目录 c. 处理类的后缀为 Hook.class.php d. 如果应用与模块有同名钩子时,只会执行模块的钩子 e. 处理类必须有 public function run(&$param) 方法 #### 系统钩子 | 钩子名称 | 说明 | | -- | -- | | APP_INIT | 应用初始化 | | APP_BEGIN | 应用运行前 | | APP_END | 应用运行后 | | CONTROLLER_START | 模块执行前 | | CONTROLLER_END | 模块执行后 | | VIEW_START | 模板显示前 (display 方法执行前 ) | | VIEW_END | 模板显示后 (display 方法执行后 ) | #### Hook::listen 使用 Hook::listen() 方法来执行定义好的钩子的所有处理类。 执行 USER_VALID 钩子 ~~~ \Took\Hook::listen('USER_VALID'); ~~~ #### Hook::exec 使用 Hook::exec() 方法执行一个钩子处理类 执行 LoginHook.class.php 处理程序类 ~~~ \Took\Hook::exec('LoginHook'); ~~~ ### Hook 钩子类 Addon 与 Hook 的操作都是使用 Took\Hook.class.php 类完成的,下面介绍Hook类的内部方法。 #### add 添加钩子 ~~~ static public function add($hook, $action) @param $hook 钩子名称 @param $action 处理类 ~~~ #### get 获得钩子信息 ~~~ static public function get($hook = '') @param string $hook 钩子名 ~~~ #### import 批量导入钩子 ~~~ static public function import($data, $recursive = true) @param $data 钩子数据 @param bool $recursive 是否递归合并 ~~~ #### listen 监听钩子 ~~~ static public function listen($hook, &$param = null) @param $hook 钩子名 @param null $param 参数 ~~~ #### exec 执行钩子 ~~~ static public function exe($name, $action, &$param = null) @param $name 钩子名 @param $action 钩子方法 @param null $param 参数 ~~~