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 = "