ThinkPHP5的行为监听整理
行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,在官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。
1、方法一:经典配置方法
(1)在应用或模块下建 behavior目录,目录内建行为类文件Test.php(以下以demo模块为例):
namespace app\demo\behavior;class Test{public function appInit(&$params){var_dump(‘appInt’);var_dump($params);}}
(2)在demo模块下建tags.php文件定义行为:
return [‘app_init’=> [‘app\\demo\\behavior\\Test’, //注意行为的命名空间(下同)]];
(3)控制器方法内需要的地方侦听行为:
public function index(){$params = ‘闭包’;Hook::listen(‘app_init’,$params);}
2、方法二:使用add方法替代tags.php文件
将方法一中的tags.php文件去掉,改为在demo模块的公共文件(common.php)或控制器方法内绑定行为到标签位,其他步骤一样。
\think\Hook::add(‘app_init’,‘app\\demo\\behavior\\Test’);
3、方法三:在控制器方法内需要的地方直接执行行为
相对于方法二,add方法也去掉了,也就是省略到了只需要两步了!
Hook::exec(‘app\\demo\\behavior\\Test’,‘app_init’,$params);
4、方法四:在控制器方法内直接使用闭包函数
相对于方法三,test.php文件也不需要了,直接监听输出
$params = ‘闭包’;Hook::add(‘app_init’,function($params){ var_dump($params);});Hook::listen(‘app_init’,$params);
备注:相对来说,方法一更方便行为的统一管理。
来源:http://www.thinkphp.cn/topic/38941.html