Loader类的composer包扫描方法改为public 供命令行调用

This commit is contained in:
thinkphp
2016-06-22 16:00:03 +08:00
parent 98084c7a47
commit 18a4eee00f

View File

@@ -160,64 +160,44 @@ class Loader
include $file; include $file;
} }
} }
} elseif (AUTO_SCAN_PACKAGE && is_dir(VENDOR_PATH)) {
self::scanComposerPackage(VENDOR_PATH);
} }
} }
// 扫描composer package // 扫描composer package
private static function scanComposerPackage($path) public static function scanComposerPackage($path)
{ {
// 自动扫描下载Composer安装类库 // 自动扫描下载Composer安装类库
$dirs = scandir($path, 1); $dirs = scandir($path, 1);
$namespace = $files = $classmap = [];
foreach ($dirs as $dir) { foreach ($dirs as $dir) {
if ('.' != $dir && '..' != $dir && is_dir($path . $dir) && is_file($path . $dir . DS . 'composer.json')) { if ('.' != $dir && '..' != $dir && is_dir($path . $dir) && is_file($path . $dir . DS . 'composer.json')) {
// 解析Composer 包 // 解析Composer 包
self::parseComposerPackage($path . $dir . DS); $content = file_get_contents($path . $dir . DS . 'composer.json');
} $result = json_decode($content, true);
}
$content = "<?php " . PHP_EOL; if (!empty($result['autoload'])) {
if (!empty(self::$load)) { $autoload = $result['autoload'];
foreach (self::$load as $file) { if (isset($autoload['psr-0'])) {
$content .= 'include \'' . $file . '\';' . PHP_EOL; foreach ($autoload['psr-0'] as $ns => $path) {
} $namespace[rtrim($ns, '\\')] = realpath($package . $path . DS . str_replace('\\', DS, $ns)) . DS;
} }
}
if (!empty(self::$namespace)) { if (isset($autoload['psr-4'])) {
$content .= "return " . var_export(self::$namespace, true) . ';' . PHP_EOL; foreach ($autoload['psr-4'] as $ns => $path) {
} $namespace[rtrim($ns, '\\')] = realpath($package . $path) . DS;
// 生成缓存 }
file_put_contents(RUNTIME_PATH . 'autoload_composer.php', $content); }
}
// 解析Composer Package if (isset($autoload['files'])) {
private static function parseComposerPackage($package) foreach ($autoload['files'] as $file) {
{ $files[] = realpath($package . $file);
$content = file_get_contents($package . 'composer.json'); }
$result = json_decode($content, true); }
if (!empty($result['autoload'])) {
$autoload = $result['autoload'];
if (isset($autoload['psr-0'])) {
foreach ($autoload['psr-0'] as $ns => $path) {
self::$namespace[rtrim($ns, '\\')] = realpath($package . $path . DS . str_replace('\\', DS, $ns)) . DS;
}
}
if (isset($autoload['psr-4'])) {
foreach ($autoload['psr-4'] as $ns => $path) {
self::$namespace[rtrim($ns, '\\')] = realpath($package . $path) . DS;
}
}
if (isset($autoload['files'])) {
foreach ($autoload['files'] as $file) {
self::$load[] = realpath($package . $file);
require $package . $file;
} }
} }
} }
return ['namespace' => $namespace, 'files' => $files, 'classmap' => $classmap];
} }
// 注册composer自动加载 // 注册composer自动加载