zoukankan      html  css  js  c++  java
  • thinkphp3 行为(behavior)分析和基本使用

    1. 名词解析

    官方解析: 来自 http://document.thinkphp.cn/manual_3_2.html#behavior_extend 

    行为(Behavior)是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,
    甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,行为的存在让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。 而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为标签(位),当应用程序运行到这个标签的时候,就会被拦截下来,统一执行相关的行为,
    类似于AOP编程中的“切面”的概念,给某一个切面绑定相关行为就成了一种类AOP编程的思想。

    1. 1 标签位置

    1) 系统核心提供的标签位置包括下面几个(按照执行顺序排列):

    app_init    应用初始化标签位
    path_info   PATH_INFO检测标签位
    app_begin   应用开始标签位
    action_name 操作方法名标签位
    action_begin    控制器开始标签位
    view_begin  视图输出开始标签位
    view_parse  视图解析标签位
    template_filter 模板内容解析标签位
    view_filter 视图输出过滤标签位
    view_end    视图输出结束标签位
    action_end  控制器结束标签位
    app_end         应用结束标签位
    
    

    2) 自定义

    行为定义: 通过{Common,Module}Conf ags.php配置文件定义,格式如下:

    <?php
    return array(
        'action_begin'=>array('Home\Behaviors\test','Home\Behaviors\test1'),//一个标签位可以有多个行为,使用数组即可。
        // 如果是3.2.1以上版本 则需要改成
        'action_begin'=>array('Home\Behaviors\testBehavior','Home\Behaviors\test1Behavior')
    );

    开发人员还可以在应用中添加自己的应用标签。

    比如在控制器的_initialize方法中:

    ThinkHook::add('action_begin','Home\Behaviors\test1');//同时添加多个行为,只要将第二个参数换成数组即可。
    // 3.2.1以上版本 需要改成
    // ThinkHook::add('action_begin','Home\Behaviors\test1Behavior');
    

      

    1.2  触发

    行为的触发: 只要在合适的地方通过以下代码

    ThinkHook::listen('标签名'[,参数]);
    // 或者
    // tag('标签名'[,参数]);
    

      

    2. 使用场景

    参考 1. 我们已经知道 行为 是类AOP编程的思想。除业务之外的操作,均可加入行为。比如日志,统计等。 

    3. 使用案例

    3.1 全局或者模块登录校验

     修改 tags.php 

    return [
        // 应用初始化
        'app_init'     => [],
        // 应用开始
        'app_begin'    => [
            "CollectionBehaviorTestBehavior"
        ],
        // 模块初始化
        'module_init'  => [],
        // 操作开始执行
        'action_begin' => [
           "BehaviorAuthBehavior"
        ],
        // 视图内容过滤
        'view_filter'  => [],
        // 日志写入
        'log_write'    => [],
        // 应用结束
        'app_end'      => [],
    
    
    ];
    

     Collection 是模块目录, Application/Collection/Behavior/TestBehavior  记录访问日志

    <?php
    
    namespace CollectionBehavior;
    
    use Think/Log; 
    
    class TestBehavior {
    
        public function run() {
            Log::write("有人访问");
        }
    }
    

      

        ThinkPHPLibraryBehaviorAuthBehavior   操作认证

    <?php
    
    namespace Behavior;
    
    class AuthBehavior {
    
        public function run() {
            $session_id = basename(strtolower(__MODULE__).'_admin_id');
            $authAdminId = session($session_id);
    
            $login_url = __MODULE__ . '/Public/login';
    
            preg_match("/(login|createVerify)/i", $_SERVER["REQUEST_URI"],$matches);
            $is_login = ($matches && count($matches) > 0) ? true : false;
            $is_get = ($_SERVER['REQUEST_METHOD'] == 'GET') ? true : false;
    
            // var_dump($authAdminId, $is_get, $is_login);exit;
            if (!$authAdminId && (!$is_login && $is_get)) {
                $timestamp = I('get._');
                if ($timestamp) {
                    // ajax
                    echo bjuiAjaxReturn(301, '请您先登录', '', '', '', true);
                    exit;
                } else {
                    //
                    // $this->error('请您先登录', __MODULE__ . '/Public/login');
                    header('Content-type:text/html;charset=utf-8');
                    redirect($login_url, 2, '请您先登录');
                }
            }
        }
    
    }
    

      

    ------  未完待续  ------  

     

  • 相关阅读:
    【转】Python爬虫(5)_性能相关
    【转】Python爬虫(4)_selenium模块
    【转】Python爬虫(3)_Beautifulsoup模块
    【转】Python爬虫_示例2
    【转】Python爬虫_示例
    linux开机自启动tomcat
    Linux下Tomcat启动,停止命令
    Linux下tomcat启动Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of
    centos7开启关闭80端口
    centos安装JDK
  • 原文地址:https://www.cnblogs.com/toughlife/p/10684158.html
Copyright © 2011-2022 走看看