From e33ec863fe1d4ea88477d59b060471ca69411e91 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Sat, 2 Jan 2016 18:41:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=A8=A1=E5=9D=97=E7=9A=84?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E7=A9=BA=E9=97=B4=E8=B0=83=E6=95=B4=20?= =?UTF-8?q?=E4=B8=BA=20app=E6=A0=B9=E5=91=BD=E5=90=8D=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=EF=BC=88=E5=8F=AF=E8=AE=BE=E7=BD=AEAPP=5FNAMESPACE=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=EF=BC=89=20=E5=B9=B6=E4=B8=94=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E6=A8=A1=E5=9D=97=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=EF=BC=88=E6=A8=A1=E5=9D=97=E4=B8=BA=E7=A9=BA=EF=BC=89=20defaul?= =?UTF-8?q?t=5Fmodule=E5=8F=82=E6=95=B0=E5=92=8CCOMMON=5FMODULE=E5=B8=B8?= =?UTF-8?q?=E9=87=8F=E8=AE=BE=E7=BD=AE=E4=B8=BA=E7=A9=BA=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base.php | 1 + library/think/app.php | 50 ++++++++++++++++++++++------------------ library/think/build.php | 31 ++++++++++++------------- library/think/loader.php | 42 ++++++++++++++++++++++----------- library/think/url.php | 16 +++++++++---- tpl/default_index.tpl | 2 +- 6 files changed, 84 insertions(+), 58 deletions(-) diff --git a/base.php b/base.php index a15b47d7..24a8cda8 100644 --- a/base.php +++ b/base.php @@ -24,6 +24,7 @@ defined('CORE_PATH') or define('CORE_PATH', LIB_PATH . 'think' . DS); defined('ORG_PATH') or define('ORG_PATH', LIB_PATH . 'org' . DS); defined('TRAIT_PATH') or define('TRAIT_PATH', LIB_PATH . 'traits' . DS); defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS); +defined('APP_NAMESPACE') or define('APP_NAMESPACE', 'app'); defined('COMMON_MODULE') or define('COMMON_MODULE', 'common'); defined('RUNTIME_PATH') or define('RUNTIME_PATH', realpath(APP_PATH) . DS . 'runtime' . DS); defined('DATA_PATH') or define('DATA_PATH', RUNTIME_PATH . 'data' . DS); diff --git a/library/think/app.php b/library/think/app.php index 85dd7842..4d2f964f 100644 --- a/library/think/app.php +++ b/library/think/app.php @@ -95,7 +95,7 @@ class App } if (!$instance) { - throw new Exception('class [ ' . MODULE_NAME . '\\' . CONTROLLER_LAYER . '\\' . Loader::parseName(str_replace('.', '\\', CONTROLLER_NAME), 1) . ' ] not exists', 10001); + throw new Exception('class [ ' . Loader::parseClass(MODULE_NAME, CONTROLLER_LAYER, CONTROLLER_NAME) . ' ] not exists', 10001); } try { // 操作方法开始监听 @@ -266,7 +266,7 @@ class App // 监听path_info APP_HOOK && Hook::listen('path_info'); // 分析PATHINFO信息 - if (!isset($_SERVER['PATH_INFO']) && $_SERVER['SCRIPT_NAME'] != $_SERVER['PHP_SELF']) { + if (!isset($_SERVER['PATH_INFO'])) { foreach ($config['pathinfo_fetch'] as $type) { if (!empty($_SERVER[$type])) { $_SERVER['PATH_INFO'] = (0 === strpos($_SERVER[$type], $_SERVER['SCRIPT_NAME'])) ? @@ -324,30 +324,36 @@ class App } $module = strtolower($result[0] ?: $config['default_module']); - if ($maps = $config['url_module_map']) { - if (isset($maps[$module])) { - // 记录当前别名 - define('MODULE_ALIAS', $module); - // 获取实际的项目名 - $module = $maps[MODULE_ALIAS]; - } elseif (array_search($module, $maps)) { - // 禁止访问原始项目 - $module = ''; + if ($module) { + if ($maps = $config['url_module_map']) { + if (isset($maps[$module])) { + // 记录当前别名 + define('MODULE_ALIAS', $module); + // 获取实际的项目名 + $module = $maps[MODULE_ALIAS]; + } elseif (array_search($module, $maps)) { + // 禁止访问原始项目 + $module = ''; + } } - } - // 获取模块名称 - define('MODULE_NAME', defined('BIND_MODULE') ? BIND_MODULE : strip_tags($module)); + // 获取模块名称 + define('MODULE_NAME', defined('BIND_MODULE') ? BIND_MODULE : strip_tags($module)); - // 模块初始化 - if (MODULE_NAME && !in_array(MODULE_NAME, $config['deny_module_list']) && is_dir(APP_PATH . MODULE_NAME)) { - APP_HOOK && Hook::listen('app_begin'); - define('MODULE_PATH', APP_PATH . MODULE_NAME . DS); - define('VIEW_PATH', MODULE_PATH . VIEW_LAYER . DS); + // 模块初始化 + if (MODULE_NAME && !in_array(MODULE_NAME, $config['deny_module_list']) && is_dir(APP_PATH . MODULE_NAME)) { + APP_HOOK && Hook::listen('app_begin'); + define('MODULE_PATH', APP_PATH . MODULE_NAME . DS); + define('VIEW_PATH', MODULE_PATH . VIEW_LAYER . DS); - // 初始化模块 - self::initModule(MODULE_NAME, $config); + // 初始化模块 + self::initModule(MODULE_NAME, $config); + } else { + throw new Exception('module [ ' . MODULE_NAME . ' ] not exists ', 10005); + } } else { - throw new Exception('module [ ' . MODULE_NAME . ' ] not exists ', 10005); + define('MODULE_NAME', ''); + define('MODULE_PATH', APP_PATH); + define('VIEW_PATH', MODULE_PATH . VIEW_LAYER . DS); } // 获取控制器名 diff --git a/library/think/build.php b/library/think/build.php index 0cde3d20..32df310a 100644 --- a/library/think/build.php +++ b/library/think/build.php @@ -18,10 +18,8 @@ class Build $lockfile = APP_PATH . 'build.lock'; if (is_writable($lockfile)) { return; - } else { - if (!touch($lockfile)) { - throw new Exception('应用目录[' . APP_PATH . ']不可写,目录无法自动生成!
请手动生成项目目录~', 10006); - } + } elseif (!touch($lockfile)) { + throw new Exception('应用目录[' . APP_PATH . ']不可写,目录无法自动生成!
请手动生成项目目录~', 10006); } foreach ($build as $module => $list) { if ('__dir__' == $module) { @@ -71,13 +69,12 @@ class Build // 创建模块目录 mkdir(APP_PATH . $module); } - if ('runtime' != $module) { + if (basename(RUNTIME_PATH) != $module) { // 创建配置文件和公共文件 self::buildCommon($module); // 创建模块的默认页面 self::buildHello($module); } - // 创建子目录和文件 foreach ($list as $path => $file) { $modulePath = APP_PATH . $module . DS; @@ -99,13 +96,14 @@ class Build } else { // 生成相关MVC文件 foreach ($file as $val) { - $filename = $modulePath . $path . DS . Loader::parseName($val) . EXT; + $filename = $modulePath . $path . DS . Loader::parseName($val) . EXT; + $namespace = APP_NAMESPACE . '\\' . ($module ? $module . '\\' : '') . $path; switch ($path) { case CONTROLLER_LAYER: // 控制器 - $content = "