在应用或模块下建 behavior目录,目录内建行为类文件Test.php(以下以home模块为例)
1 2 3 4 5 6 | namespace app\home\behavior; //注意应用或模块的不同命名空间 class Test { public function run(& $params ){ echo $params ; } } |
方法一
1.在入口文件中,增加: define('APP_HOOK',true);
2.home模块下建tags.php文件定义行为
1 2 3 4 5 6 7 8 9 | return [ 'app_init' => [ 'app\\home\\behavior\\Test' , //注意行为的命名空间(下同) ], 'zzzzz' => [ //自定义标签位 'app\\home\\behavior\\Test' , ], //................. ]; |
3.控制器方法内需要的地方侦听行为
1 2 | \think\Hook::listen( 'app_init' , $params ); //参数为变量(下同) \think\Hook::listen( 'zzzzz' , $params ); //自定义 |
方法二
1.home模块的公共文件(common.php)或控制器方法内绑定行为到标签位
1 2 | \think\Hook::add( 'app_init' , 'app\\home\\behavior\\Test' ); \think\Hook::add( 'zzzz' , 'app\\home\\behavior\\Test' ); //自定义 |
2.控制器方法内需要的地方侦听行为
1 2 | \think\Hook::listen( 'app_init' , $params ); \think\Hook::listen( 'zzzzz' , $params ); //自定义 |
方法三
在控制器方法内需要的地方直接执行行为
1 | \think\Hook:: exec ( 'app\\home\\behavior\\Test' , 'run' , $params ); |
方法四
在控制器方法内直接使用闭包函数
1 2 3 | $a = '闭包函数' ; \think\Hook::add( 'zzzz' , function ( $a ){ var_dump( $a );}); \think\Hook::listen( 'zzzz' , $a ); |
方法五
行为类绑定到多个标签
1.Test.php定义如下:
1 2 3 4 5 6 7 8 9 | namespace app\home\behavior; class Test { public function app_init(& $params ){ echo 'app_init' ; } public function app_end(& $params ){ echo 'app_end' ; } } |
2.home模块的公共文件(common.php)或控制器方法内绑定行为到标签位
1 2 | \think\Hook::add( 'app_init' , 'app\\home\\behavior\\Test' ); \think\Hook::add( 'app_end' , 'app\\home\\behavior\\Test' ); |
3.控制器方法内需要的地方侦听行为
1 2 | \think\Hook::listen( 'app_init' , $params ); \think\Hook::listen( 'app_end' , $params ); |
友情提示:垃圾评论一律封号...