thinkphp 3.2.3 - App.class.php 解析

來源:互聯網
上載者:User

標籤:擴充   lower   return   build   exit   array   erro   rto   page   

 

class App {        public static function init() {        load_ext_file(COMMON_PATH);//         {//             /home/www/www.domain.com/myapp/Common/Common/<LOAD_EXT_FILE,field1>.php//             /home/www/www.domain.com/myapp/Common/Conf/<LOAD_EXT_CONFIG,config1>.php//         }                // URL調度        Dispatcher::dispatch();//         {//             //...//             // 匹配出模組//             //...//             // 載入模組設定檔  /home/www/www.domain.com/myapp/Module1/Conf/config.php//             if(is_file(MODULE_PATH.‘Conf/config‘.CONF_EXT))//                 C(load_config(MODULE_PATH.‘Conf/config‘.CONF_EXT));//             // 載入應用模式對應的設定檔//             if(‘common‘ != APP_MODE && is_file(MODULE_PATH.‘Conf/config_‘.APP_MODE.CONF_EXT))//                 C(load_config(MODULE_PATH.‘Conf/config_‘.APP_MODE.CONF_EXT));//             // 當前應用狀態對應的設定檔//             if(APP_STATUS && is_file(MODULE_PATH.‘Conf/‘.APP_STATUS.CONF_EXT))//                 C(load_config(MODULE_PATH.‘Conf/‘.APP_STATUS.CONF_EXT));        //             // 載入模組別名定義  /home/www/www.domain.com/myapp/Module1/Conf/alias.php//             if(is_file(MODULE_PATH.‘Conf/alias.php‘))//                 Think::addMap(include MODULE_PATH.‘Conf/alias.php‘);//             // 載入模組tags檔案定義 /home/www/www.domain.com/myapp/Module1/Conf/tags.php//             if(is_file(MODULE_PATH.‘Conf/tags.php‘))//                 Hook::import(include MODULE_PATH.‘Conf/tags.php‘);//             // 載入模組函數檔案  /home/www/www.domain.com/myapp/Module1/Conf/function.php//             if(is_file(MODULE_PATH.‘Common/function.php‘))//                 include MODULE_PATH.‘Common/function.php‘;        //             // 載入模組的擴充設定檔//             load_ext_file(MODULE_PATH);// //             {// //                 /home/www/www.domain.com/myapp/Module1/Common/Common/<LOAD_EXT_FILE,field1>.php// //                 /home/www/www.domain.com/myapp/Module1/Common/Conf/<LOAD_EXT_CONFIG,config1>.php// //             }        //             // 擷取控制器的命名空間(路徑)//             // controller        //             // 擷取控制器和操作名//             // action//         }                Hook::listen(‘url_dispatch‘);    }        public static function run() {        // 應用初始化標籤        Hook::listen(‘app_init‘); // 執行執行app_init標記的行為,沒有傳回值//         {//             Behavior\BuildLiteBehavior//         }                App::init(); // ******* 引入其他檔案,解析路由,引入模組中的相關配置  *******                Hook::listen(‘app_begin‘);//         {//             Behavior\ReadHtmlCacheBehavior//         }                // Session初始化        if(!IS_CLI){            session(C(‘SESSION_OPTIONS‘));        }                App::exec(); // ******* 根據解析出來的路由,執行代碼 *******                Hook::listen(‘app_end‘);//         {//             Behavior\ShowPageTraceBehavior//         }    }        public static function exec() {            if(!preg_match(‘/^[A-Za-z](\/|\w)*$/‘,CONTROLLER_NAME)){ // 安全檢測            $module  =  false;        }elseif(C(‘ACTION_BIND_CLASS‘)){            // 操作綁定到類:模組\Controller\控制器\操作            $layer  =   C(‘DEFAULT_C_LAYER‘);            if(is_dir(MODULE_PATH.$layer.‘/‘.CONTROLLER_NAME)){ // /home/www/www.domain.com/myapp/Module1/Controller/Ctrl1                $namespace  =   MODULE_NAME.‘\\‘.$layer.‘\\‘.CONTROLLER_NAME.‘\\‘;  // \Module1\Controller\Ctrl1\            }else{                 // 空控制器                $namespace  =   MODULE_NAME.‘\\‘.$layer.‘\\_empty\\‘;  // \Module1\Controller\_empty\            }            $actionName     =   strtolower(ACTION_NAME);            if(class_exists($namespace.$actionName)){ // \Module1\Controller\Ctrl1\action1                $class   =  $namespace.$actionName;            }elseif(class_exists($namespace.‘_empty‘)){  // \Module1\Controller\Ctrl1\_empty                // 空操作                $class   =  $namespace.‘_empty‘;            }else{                E(L(‘_ERROR_ACTION_‘).‘:‘.ACTION_NAME);            }            $module  =  new $class;            // 操作綁定到類後 固定執行run入口            $action  =  ‘run‘;        }else{            //建立控制器執行個體            $module  =  controller(CONTROLLER_NAME,CONTROLLER_PATH); //             {//                 new \Module1\Controller\Ctrl1//                 new \Addon\$_GET[‘addon‘]\Controller\Ctrl1//             }        }            if(!$module) {            if(‘4e5e5d7364f443e28fbf0d3ae744a59a‘ == CONTROLLER_NAME) {                header("Content-type:image/png");                exit(base64_decode(App::logo()));            }                // 是否定義Empty控制器            $module = A(‘Empty‘); // EmptyController            if(!$module){                E(L(‘_CONTROLLER_NOT_EXIST_‘).‘:‘.CONTROLLER_NAME);            }        }            // 擷取當前操作名 支援動態路由        if(!isset($action)){            $action    =   ACTION_NAME.C(‘ACTION_SUFFIX‘);        }        try{            self::invokeAction($module,$action); // 執行行為方法        } catch (\ReflectionException $e) {            // 方法調用發生異常後 引導到__call方法處理            $method = new \ReflectionMethod($module,‘__call‘);             $method->invokeArgs($module,array($action,‘‘));//             {//                 EmptyController::__call()//                 Ctrl1Controller::__call()//             }        }        return ;    }}

 

thinkphp 3.2.3 - App.class.php 解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.