標籤:擴充 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 解析