欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

thinkphp 实战记录 3

程序员文章站 2022-07-14 20:51:09
...

行为Behavior

行为就是 标签位置各自独立执行的行为 很多系统功能也是通过内置的行为扩展完成的。

系统核心标签的位置包括

thinkphp 实战记录 3

每个标签位置可以配置多个行为,多个行为默认按照定义的顺序执行,除非前面的行为执行了中断

内置的行为包括

thinkphp 实战记录 3

比如在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