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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值