通过一下午的研究,了解了一些在这里给大家讲解一下,
Thinkphp5.0自带钩子几个
- app_init 应用初始化标签位,在think\App.php的initCommon函数中Hook::listen(‘app_init’);没有接收参数。
- app_begin应用开始标签位,在think\App.php的run函数中,在加载路由和请求信息后执行。会接收一个参数,存储的是本次请求的调度信息。
- module_init 模块初始化标签位,在think\App.php的module函数中,在加载请求控制器之前执行,接收一个参数,存储请求信息。
- action_init 控制器开始标签位,在think\App.php的module函数中,在加载完控制器后,使用反射请求控制器之前执行。接收一个参数,是一个数组,第一个元素是请求控制器实例对象,第二个函数时要执行的控制器函数名。
- view_fileter 视图输出过滤标签位,在think\View.php的fetch函数中,接收一个参数,视图字符串。
- app_end 应用结束标签为,在think\App.php中run函数中,Hook::listen(‘app_end’);
- log_write 日志write方法标签位,在调用Log::wirte记录日志之前执行。接收一个参数,要写入的日志信息。
- response_end 响应结束标签为。在think\Response.php的send函数中,在响应客户端请求之后执行。
这里面自定义的参数带不过去
?
解决办法一:
?在app\tags.php文件中添加钩子
define('BEHAVIOR_PATH', 'app\\common\\behavior\\');
$data = [
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [],
// 日志写入
'log_write' => [],
//随意定义
'order_init'=>[BEHAVIOR_PATH . 'Order']
];
使用方式
$params = ['id'=>'测试'];
//参数1 钩子名称 参数2 传递的参数
Hook::listen('order_init',$params);
//打印结果
<pre>array(1) {
["id"] => string(6) "测试"
}
解决办法二:
$params = ['id'=>'测试'];
Hook::exec('app\common\behavior\Order','run',$params);
?//打印结果
<pre>array(1) { ? ["id"] => string(6) "测试" } </pre>
这样参数就带过去,ThinkPHP内置的方式没有看到如何带参数过去,如果有知道的小伙伴可以探讨一下
以上就是ThinkPHP5.0 使用钩子并且传递参数的过程,想知道使用场景小伙伴请自行百度?
|