zoukankan      html  css  js  c++  java
  • thinkphp 3+ 观后详解 (4)

        static public function run() {
            // 应用初始化标签
            Hook::listen('app_init');
            App::init();
            // 应用开始标签
            Hook::listen('app_begin');
            // Session初始化
            if(!IS_CLI){
                session(C('SESSION_OPTIONS'));
            }
            // 记录应用初始化时间
            G('initTime');
            App::exec();
            // 应用结束标签
            Hook::listen('app_end');
            return ;
        }

    以上就是App::run()的代码。这里需要细嚼慢咽了。毕竟是重点中的重点。

    Hook::listen('app_init'); tags里默认没有定义,如果需要的话,需要自己写相应的行为扩展,这里的话让我想起了一件去年的往事。去baidu糯米面试的时候,面试官一开始就问我写过框架扩展没,然后我就无语了,完全不知道是什么东西,再然后,大家都懂了。

    这里的

    Hook::listen('app_begin');
    Hook::listen('app_end');
    都已经定义好了

    下面我们来看App::init() 的实现

        static public function init() {
            // 加载动态应用公共文件和配置
            load_ext_file(COMMON_PATH);
    
            // 日志目录转换为绝对路径 默认情况下存储到公共模块下面
            C('LOG_PATH',   realpath(LOG_PATH).'/Common/');
    
            // 定义当前请求的系统常量
            define('NOW_TIME',      $_SERVER['REQUEST_TIME']);
            define('REQUEST_METHOD',$_SERVER['REQUEST_METHOD']);
            define('IS_GET',        REQUEST_METHOD =='GET' ? true : false);
            define('IS_POST',       REQUEST_METHOD =='POST' ? true : false);
            define('IS_PUT',        REQUEST_METHOD =='PUT' ? true : false);
            define('IS_DELETE',     REQUEST_METHOD =='DELETE' ? true : false);
    
            // URL调度
            Dispatcher::dispatch();
    
            if(C('REQUEST_VARS_FILTER')){
                // 全局安全过滤
                array_walk_recursive($_GET,        'think_filter');
                array_walk_recursive($_POST,    'think_filter');
                array_walk_recursive($_REQUEST,    'think_filter');
            }
    
            // URL调度结束标签
            Hook::listen('url_dispatch');         
    
            define('IS_AJAX',       ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || !empty($_POST[C('VAR_AJAX_SUBMIT')]) || !empty($_GET[C('VAR_AJAX_SUBMIT')])) ? true : false);
    
            // TMPL_EXCEPTION_FILE 改为绝对地址
            C('TMPL_EXCEPTION_FILE',realpath(C('TMPL_EXCEPTION_FILE')));
            return ;
        }

    这里我主要感兴趣的是url调度代码,因为cakephp一开始就是这样写的Dispatcher::dispatch(); 这里直到现在才使用,我并不明白二者区别是什么,这个等到以后再来写吧。

  • 相关阅读:
    手机抓包方法
    IBM appscan 9.0破解版分享
    C#打开新页面
    双城记
    卸载趋势
    测试环境搭建
    C#常用函数→ASP.NET篇
    C#常用函数--通用篇
    读>>>>白帽子讲Web安全<<<<摘要→我推荐的一本书→1
    TCP/IP网络编程技术基础
  • 原文地址:https://www.cnblogs.com/best-jobs/p/4807840.html
Copyright © 2011-2022 走看看