thinkphp 行为Hook 使用说明
关于tp的钩子功能,梳理下:
添加行为标签位:
tp默认在tags.php文件中已经添加了:
return [ // 应用初始化 'app_init' => [], // 应用开始 'app_begin' => [], // 模块初始化 'module_init' => [], // 操作开始执行 'action_begin' => [], // 视图内容过滤 'view_filter' => [], // 日志写入 'log_write' => [], // 应用结束 'app_end' => [], ];
在tp中,典型的例子就是:App.class.php
static public function run() { // 应用初始化标签 Hook::listen('app_init'); App::init(); // 应用开始标签 Hook::listen('app_begin'); // Session初始化 if(!IS_CLI){ session(C('SESSION_OPTIONS')); } // 记录应用初始化时间 G('initTime'); App::exec(); // 应用结束标签 Hook::listen('app_end'); return ; }
注意:这些标签位在tp的框架中已经有监听了,如果你写在这个里面会在tp加载时和你监听的两个地方都执行到,会出现两次执行这样的问题,我就遇到了输出了两次的问题。但是用add动态添加的话不会出现。
手工在tags.php文件中加入自己的标签,比如:'test_abc'=>['app\\index\\behavior\\CheckAuth'],就是这个标签指向到这个定义行为的文件。
app\\index\\behavior\\CheckAuth 这个文件就是具体的行为的定义,需要执行什么逻辑都写在这里面,默认run方法,类似构造方法。
如果不是手工去tags.php中配置,那么就用Hook::add('test_abc','app\\public_tmp\\behavior\\CheckAuth');动态加载方式进行添加。
使用这个钩子:
Hook::listen('test_abc');就可以了。
如果test_abc注册了多个行为的话,会按照顺序执行。