thinkphp 实战记录 3
行为Behavior
行为就是 标签位置各自独立执行的行为 很多系统功能也是通过内置的行为扩展完成的。
系统核心标签的位置包括
每个标签位置可以配置多个行为,多个行为默认按照定义的顺序执行,除非前面的行为执行了中断
内置的行为包括
比如在tags("view_parse")的位置就会执行 LocationTemplateBehavior.class.php里面的run方法。
行为扩展的定义,就是定义一个XXXBehavior类继承Behavior 然后放到Lib/Behavior目录内
class TestBehavior extends Behavior {
// 行为参数定义
protected $options = array(
'TEST_PARAM' => false, // 行为参数 会转换成TEST_PARAM配置参数
);
// 行为扩展的执行入口必须是run
public function run(&$params){
if(C('TEST_PARAM')) {
echo 'RUNTEST BEHAVIOR'.$params;
}
}
我们把TestBehavior行为扩展类放到项目目录的Lib/Behavior目录下面,其中options属性必须是数组方式定义,而且在行为初始化的同时options属性中的参数会转换成全局的配置参数,所以,我们在入口方法里面可以直接使用:
C('TEST_PARAM')
TEST_PARAM参数是没有预先定义的,行为的options属性里面提供的参数只是一个初始值,所有的参数我们可以在项目配置文件中重新定义。例如,上面的Test行为如果要执行,我们需要在项目配置文件中添加下面的配置:
'TEST_PARAM' =>true
我也可以在自己定义的Action里面添加标签,比如
Class CommonAction extends Action{
Public function _initialize(){
tag('action_init'); // 添加action_init 标签
}
}
执行一个行为有三种方法
第一是在行为配置文件中添加。主要是在项目配置目录中添加tags.php文件。主要是Core/conf/tags.php里面
<?php
// 系统默认的核心行为扩展列表文件
return array(
'app_init'=>array(),
'app_begin'=>array( //因为项目中也可能用到语言行为,最好放在项目开始的地方
'CheckLang', //检测语言, 一定放在ReadHtmlCache前,否则会导致静态缓存有问题
//'BadIP', //ip过滤
'StartWeb', //启动Web
'ReadHtmlCache', // 读取静态缓存
),
'route_check'=>array(
'CheckRoute', // 路由检测
),
'app_end'=>array(),
'path_info'=>array(),
'action_begin'=>array(),
'action_end'=>array(),
'view_begin'=>array(),
'view_template'=>array(
'LocationTemplate', // 自动定位模板文件
),
'view_parse'=>array(
'ParseTemplate', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
),
'view_filter'=>array(
'ContentReplace', // 模板输出替换
'TokenBuild', // 表单令牌
'WriteHtmlCache', // 写入静态缓存
'ShowRuntime', // 运行时间显示
'BadWords', // 模板输出替换
),
'view_end'=>array( 'ShowPageTrace', /*页面Trace显示*/ ),
'info_content'=>array(
'AutoLink', //关键词自动生成链接
),
'channel_content'=>array(
'AutoLink', //关键词自动生成链接
),
'baseaction_init'=>array(
//'IpLocation', //Ip位置服务
),
);
比如在某处执行 tag("baseaction_init") 那么就会按顺序执行 IpLocationBehavior.class.php