diff --git a/base.php b/base.php index 226b96d4..0a1030ff 100644 --- a/base.php +++ b/base.php @@ -27,7 +27,6 @@ defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS); defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS); defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS); defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS); -defined('APP_NAMESPACE') or define('APP_NAMESPACE', 'app'); defined('CONF_PATH') or define('CONF_PATH', APP_PATH); // 配置文件目录 defined('CONF_EXT') or define('CONF_EXT', EXT); // 配置文件后缀 defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀 diff --git a/convention.php b/convention.php index d69685a1..793f02ed 100644 --- a/convention.php +++ b/convention.php @@ -5,6 +5,8 @@ return [ // | 应用设置 // +---------------------------------------------------------------------- + // 应用命名空间 + 'app_namespace' => 'app', // 应用调试模式 'app_debug' => true, // 应用模式状态 diff --git a/library/think/App.php b/library/think/App.php index 3b266680..36130f09 100644 --- a/library/think/App.php +++ b/library/think/App.php @@ -44,6 +44,11 @@ class App */ public static $debug = true; + /** + * @var string 应用类库命名空间 + */ + public static $namespace = 'app'; + /** * 执行应用程序 * @access public @@ -300,15 +305,17 @@ class App { if (empty(self::$init)) { // 初始化应用 - self::$init = $config = self::init(); + $config = self::init(); - // 是否调试模式 - self::$debug = Config::get('app_debug'); + // 应用调试模式 + self::$debug = Config::get('app_debug'); if (!self::$debug) { ini_set('display_errors', 'Off'); } - // 注册根命名空间 + // 应用命名空间 + self::$namespace = $config['app_namespace']; + Loader::addNamespace($config['app_namespace'], APP_PATH); if (!empty($config['root_namespace'])) { Loader::addNamespace($config['root_namespace']); } @@ -328,6 +335,8 @@ class App // 监听app_init Hook::listen('app_init'); + + self::$init = $config; } return self::$init; } diff --git a/library/think/Build.php b/library/think/Build.php index ed510e39..6ea1b755 100644 --- a/library/think/Build.php +++ b/library/think/Build.php @@ -17,9 +17,10 @@ class Build * 根据传入的build资料创建目录和文件 * @access protected * @param array $build build列表 + * @param string $namespace 应用类库命名空间 * @return void */ - public static function run(array $build = []) + public static function run(array $build = [], $namespace = 'app') { // 锁定 $lockfile = APP_PATH . 'build.lock'; @@ -37,7 +38,7 @@ class Build self::buildFile($list); } else { // 创建模块 - self::module($module, $list); + self::module($module, $list, $namespace); } } // 解除锁定 @@ -83,10 +84,11 @@ class Build * 创建模块 * @access public * @param string $module 模块名 - * @param array $list build列表 + * @param array $list build列表 + * @param string $namespace 应用类库命名空间 * @return void */ - public static function module($module = '', $list = []) + public static function module($module = '', $list = [], $namespace = 'app') { $module = $module ? $module : ''; if (!is_dir(APP_PATH . $module)) { @@ -97,7 +99,7 @@ class Build // 创建配置文件和公共文件 self::buildCommon($module); // 创建模块的默认页面 - self::buildHello($module); + self::buildHello($module, $namespace); } if (empty($list)) { // 创建默认的模块目录和文件 @@ -129,7 +131,7 @@ class Build foreach ($file as $val) { $val = trim($val); $filename = $modulePath . $path . DS . $val . (CLASS_APPEND_SUFFIX ? ucfirst($path) : '') . EXT; - $namespace = APP_NAMESPACE . '\\' . ($module ? $module . '\\' : '') . $path; + $namespace = $namespace . '\\' . ($module ? $module . '\\' : '') . $path; $class = $val . (CLASS_APPEND_SUFFIX ? ucfirst($path) : ''); switch ($path) { case 'controller': // 控制器 @@ -163,14 +165,15 @@ class Build * 创建模块的欢迎页面 * @access public * @param string $module 模块名 + * @param string $namespace 应用类库命名空间 * @return void */ - protected static function buildHello($module) + protected static function buildHello($module, $namespace) { $filename = APP_PATH . ($module ? $module . DS : '') . 'controller' . DS . 'Index' . (CLASS_APPEND_SUFFIX ? 'Controller' : '') . EXT; if (!is_file($filename)) { $content = file_get_contents(THINK_PATH . 'tpl' . DS . 'default_index.tpl'); - $content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [APP_NAMESPACE, $module ? $module . '\\' : '', 'controller', CLASS_APPEND_SUFFIX ? 'Controller' : ''], $content); + $content = str_replace(['{$app}', '{$module}', '{layer}', '{$suffix}'], [$namespace, $module ? $module . '\\' : '', 'controller', CLASS_APPEND_SUFFIX ? 'Controller' : ''], $content); if (!is_dir(dirname($filename))) { mkdir(dirname($filename), 0777, true); } diff --git a/library/think/Loader.php b/library/think/Loader.php index a5c38032..6ba13428 100644 --- a/library/think/Loader.php +++ b/library/think/Loader.php @@ -464,6 +464,6 @@ class Loader $array = explode('\\', $name); $class = self::parseName(array_pop($array), 1) . (CLASS_APPEND_SUFFIX || $appendSuffix ? ucfirst($layer) : ''); $path = $array ? implode('\\', $array) . '\\' : ''; - return APP_NAMESPACE . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class; + return App::$namespace . '\\' . ($module ? $module . '\\' : '') . $layer . '\\' . $path . $class; } } diff --git a/library/think/console/command/make/Controller.php b/library/think/console/command/make/Controller.php index 911c9b1f..5f41e171 100644 --- a/library/think/console/command/make/Controller.php +++ b/library/think/console/command/make/Controller.php @@ -11,6 +11,7 @@ namespace think\console\command\make; +use think\App; use think\console\Input; use think\console\input\Argument; use think\console\input\Option; @@ -39,7 +40,7 @@ class Controller extends \think\console\command\Make // 处理命名空间 if (!empty($module)) { - $namespace = APP_NAMESPACE . "\\" . $module . "\\" . 'controller' . "\\" . $namespace; + $namespace = App::$namespace . "\\" . $module . "\\" . 'controller' . "\\" . $namespace; } // 处理继承 @@ -50,7 +51,7 @@ class Controller extends \think\console\command\Make } else { if (!preg_match("/\\\/", $extend)) { if (!empty($module)) { - $extend = "\\" . APP_NAMESPACE . "\\" . $module . "\\" . 'controller' . "\\" . $extend; + $extend = "\\" . App::$namespace . "\\" . $module . "\\" . 'controller' . "\\" . $extend; } } } diff --git a/mode/common.php b/mode/common.php index 1fa74a31..59e3f8c6 100644 --- a/mode/common.php +++ b/mode/common.php @@ -15,10 +15,9 @@ return [ // 命名空间 'namespace' => [ - 'think' => LIB_PATH . 'think' . DS, - 'behavior' => LIB_PATH . 'behavior' . DS, - 'traits' => LIB_PATH . 'traits' . DS, - APP_NAMESPACE => APP_PATH, + 'think' => LIB_PATH . 'think' . DS, + 'behavior' => LIB_PATH . 'behavior' . DS, + 'traits' => LIB_PATH . 'traits' . DS, ], // 配置文件 diff --git a/mode/sae.php b/mode/sae.php index 7344a844..e8896435 100644 --- a/mode/sae.php +++ b/mode/sae.php @@ -18,7 +18,6 @@ return [ 'think' => LIB_PATH . 'think' . DS, 'behavior' => LIB_PATH . 'behavior' . DS, 'traits' => LIB_PATH . 'traits' . DS, - APP_NAMESPACE => APP_PATH, ], // 配置文件 diff --git a/tests/thinkphp/baseTest.php b/tests/thinkphp/baseTest.php index d8b2ce30..f458f48d 100644 --- a/tests/thinkphp/baseTest.php +++ b/tests/thinkphp/baseTest.php @@ -27,7 +27,6 @@ class baseTest extends \PHPUnit_Framework_TestCase $this->assertNotEmpty(CORE_PATH); $this->assertNotEmpty(TRAIT_PATH); $this->assertNotEmpty(APP_PATH); - $this->assertNotEmpty(APP_NAMESPACE); $this->assertNotEmpty(RUNTIME_PATH); $this->assertNotEmpty(LOG_PATH); $this->assertNotEmpty(CACHE_PATH);