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 ;
}
}