ThinkPHP5的行为监听整理

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据