在ThinkPHP 3.X中加入了CBD模式,阅读了一下官方的文档之后,感觉这个CBD模式中的B(Behavior),官方的解释是这样的:
行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签(位)中进行侦听。
而我对于这个的理解,其实就是一种事件的侦听,当我们使用行为这个动作的时候,我们就可以在thinkPHP中任何的地方调用;官方其实已经有写好的一些行为,而这些行为的文件就在 ThinkPHP/Library/Behavior文件夹下面。当我们要使用这些行为的时候,有两个添加侦听的方法。
使用functions.php中的tag(‘标签’,’变量’)
tag('标签',$变量);
或者是使用
Hook::listen('标签',$变量);
调用后,定义好的行为就会执行了;而如果我们想自定义行为那应该怎样操作呢?
1:首先我们要先创建一个新的类,例如TestBehavior.class.php,当然囖我们也需要按照thinkPHP中的文件命名规则来进行命名
2:类创建好之后,我们还需要在这个类中创建一个run的方法(必须的)
class TestBehavior
{
// 行为扩展的执行入口必须是run
public function run($params){
echo 'RUNTEST BEHAVIOR '.$params;
}
}
3:然后我们还需要为这个行为注册一个行为,注册行为的文件为ThinkPHP->common.php在这个文件里面我们可以看到一些官方已经注册号的行为
// 行为扩展定义
'tags' => array(
'app_init' => array(
'Behavior\BuildLiteBehavior', // 生成运行Lite文件
),
'app_begin' => array(
'Behavior\ReadHtmlCacheBehavior', // 读取静态缓存
),
'app_end' => array(
'Behavior\ShowPageTraceBehavior', // 页面Trace显示
),
'view_parse' => array(
'Behavior\ParseTemplateBehavior', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
),
'template_filter'=> array(
'Behavior\ContentReplaceBehavior', // 模板输出替换
),
'view_filter' => array(
'Behavior\WriteHtmlCacheBehavior', // 写入静态缓存
),
'test' => array(
'Behavior\TestBehavior', // 自定义行为
),
),
到此整个行为就已经注册好了,当我们在项目中调用tags(‘test’, var)或者是Hook::listen(′test′, 变量);我们所定义的行为就会执行起来了。