diff --git a/library/think/console/command/optimize/Autoload.php b/library/think/console/command/optimize/Autoload.php index 7311aafb..a06509a8 100644 --- a/library/think/console/command/optimize/Autoload.php +++ b/library/think/console/command/optimize/Autoload.php @@ -11,6 +11,7 @@ namespace think\console\command\optimize; use think\App; +use think\Config; use think\console\Command; use think\console\Input; use think\console\Output; @@ -32,7 +33,7 @@ class Autoload extends Command /** * 类库映射 */ - + return [ EOF; @@ -42,9 +43,14 @@ EOF; 'think\\' => LIB_PATH . 'think', 'behavior\\' => LIB_PATH . 'behavior', 'traits\\' => LIB_PATH . 'traits', - '' => realpath(rtrim(EXTEND_PATH)) + '' => realpath(rtrim(EXTEND_PATH)), ]; + $root_namespace = Config::get('root_namespace'); + foreach ($root_namespace as $namespace => $dir) { + $namespacesToScan[$namespace . '\\'] = realpath($dir); + } + krsort($namespacesToScan); $classMap = []; foreach ($namespacesToScan as $namespace => $dir) { @@ -84,7 +90,7 @@ EOF; $this->output->writeln( 'Warning: Ambiguous class resolution, "' . $class . '"' . ' was found in both "' . str_replace(["',\n"], [ - '' + '', ], $classMap[$class]) . '" and "' . $path . '", the first will be used.' ); } @@ -96,20 +102,24 @@ EOF; { $baseDir = ''; - $appPath = $this->normalizePath(realpath(APP_PATH)); $libPath = $this->normalizePath(realpath(LIB_PATH)); + $appPath = $this->normalizePath(realpath(APP_PATH)); $extendPath = $this->normalizePath(realpath(EXTEND_PATH)); + $rootPath = $this->normalizePath(realpath(ROOT_PATH)); $path = $this->normalizePath($path); - if (strpos($path, $libPath . '/') === 0) { + if ($libPath !== null && strpos($path, $libPath . '/') === 0) { $path = substr($path, strlen(LIB_PATH)); $baseDir = 'LIB_PATH'; - } elseif (strpos($path, $appPath . '/') === 0) { + } elseif ($appPath !== null && strpos($path, $appPath . '/') === 0) { $path = substr($path, strlen($appPath) + 1); $baseDir = 'APP_PATH'; - } elseif (strpos($path, $extendPath . '/') === 0) { + } elseif ($extendPath !== null && strpos($path, $extendPath . '/') === 0) { $path = substr($path, strlen($extendPath) + 1); $baseDir = 'EXTEND_PATH'; + } elseif ($rootPath !== null && strpos($path, $rootPath . '/') === 0) { + $path = substr($path, strlen($rootPath) + 1); + $baseDir = 'ROOT_PATH'; } if ($path !== false) { @@ -121,6 +131,9 @@ EOF; protected function normalizePath($path) { + if ($path === false) { + return null; + } $parts = []; $path = strtr($path, '\\', '/'); $prefix = '';