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