美文网首页
ThinkPHP笔记-CBD架构

ThinkPHP笔记-CBD架构

作者: ResearchWorld | 来源:发表于2016-09-16 16:31 被阅读0次

    thinkphp使用核心c(core)+行为b(behavior)+驱动d(driver)三种方式架构。

    Core(核心)

    ThinkPHP的核心部分包括核心函数库、惯例配置、核心类库(包括基础类和内置驱动及核心行为)

    Driver(驱动)

    //包含以下文件
    ThinkPHP/Library/Think/Cache/Driver // 缓存驱动类库
    ThinkPHP/Library/Think/Db/Driver // 数据库驱动类库
    ThinkPHP/Library/Think/Log/Driver // 日志记录驱动类库
    ThinkPHP/Library/Think/Session/Driver // Session驱动类库
    ThinkPHP/Library/Think/Storage/Driver // 存储驱动类库
    ThinkPHP/Library/Think/Template/Driver // 第三方模板引擎驱动类库
    ThinkPHP/Library/Think/Template/TagLib // 内置模板引擎标签库扩展类库
    

    Behavior(行为)

    什么是行为,行为是应用的执行过程中的一个动作一个处理。有些行为具有位置共性。
    行为发生的位置可以称为标签或钩子。

    系统核心的一些标签

    app_init 应用初始化标签位
    module_check 模块检测标签位(**3.2.1版本新增**)
    path_info PATH_INFO检测标签位
    app_begin 应用开始标签位
    action_name 操作方法名标签位
    action_begin 控制器开始标签位
    view_begin 视图输出开始标签位
    view_template 视图模板解析标签位
    view_parse 视图解析标签位
    template_filter 模板解析过滤标签位
    view_filter 视图输出过滤标签位
    view_end 视图输出结束标签位
    action_end 控制器结束标签位
    app_end 应用结束标签位
    

    自定义标签

    // 添加my_tag 标签侦听
    tag('my_tag'); 
    // 下面的写法作用一致
    \Think\Hook::listen('my_tag');
    
    tag函数用于设置某个标签位,可以传入并且只接受一个参数,如果需要传入多个参数,请使用数组,
    tag('my_tag',$params); // 添加my_tag 标签侦听
    
    该参数为引用传值,所以只能传入变量,因此下面的传值是错误的:
    tag('my_tag','param'); // 添加my_tag 标签侦听
    

    行为的定义

    行为定义
    自定义的扩展行为可以放在核心或者应用目录,只要遵循命名空间的定义规则即可。
    **行为类的命名采用:行为名称(驼峰法,首字母大写)+Behavior **行为类的定义方式如下:

    namespace Home\Behavior;
    //**3.2.1版本**开始,行为类的定义无需继承Think\Behavior类
    use Think\Behavior; 
    //**3.2.1版本**开始,行为类的定义无需继承Think\Behavior类
    class TestBehavior extends Behavior {
     //行为扩展的执行入口必须是run
    //run方法的参数只允许一个,但可以传入数组。
     public function run(&$params){
     if(C('TEST_PARAM')) {
         echo 'RUNTEST BEHAVIOR '.$params;}
     }
    }
    

    行为绑定

    行为定义完成后,就需要绑定到某个标签位置才能生效,否则是不会执行的。
    我们需要在应用的行为定义文件tags.php
    文件中进行行为和标签的位置定义,格式如下:

    return array(
     '标签名称1'=>array('行为名1','行为名2',...), 
     '标签名称2'=>array('行为名1','行为名2',...), 
     );
    

    单独执行

    行为的调用不一定要放到标签才能调用,如果需要的话,我们可以在控制器中或者其他地方直接调用行为。例如,我们可以把用户权限检测封装成一个行为类,例如:

    namespace Home\Behavior;
    use Think\Behavior;
    class AuthCheckBehavior extends Behavior {
     // 行为扩展的执行入口必须是run
     public function run(&$return){
     if(C('USER_AUTH_ON')) {
     // 进行权限认证逻辑 如果认证通过 $return = true;
     // 否则用halt输出错误信息
     }
     }
    }
    

    定义了AuthCheck行为后,我们可以在控制器的_initialize方法中直接用下面的方式调用:
    B('Home\Behavior\AuthCheck');

    相关文章

      网友评论

          本文标题:ThinkPHP笔记-CBD架构

          本文链接:https://www.haomeiwen.com/subject/uvsmettx.html