diff --git a/extensions/yii/composer/CHANGELOG.md b/extensions/yii/composer/CHANGELOG.md index 8c49892..3156dbc 100644 --- a/extensions/yii/composer/CHANGELOG.md +++ b/extensions/yii/composer/CHANGELOG.md @@ -5,6 +5,7 @@ Yii Framework 2 composer extension Change Log ---------------------------- - Bug #1480: Fixed issue with creating extensions.php when php opcache is enabled (cebe) +- Enh: Added support for installing packages conforming to PSR-4 standard (qiangxue) 2.0.0 alpha, December 1, 2013 diff --git a/extensions/yii/composer/Installer.php b/extensions/yii/composer/Installer.php index 04d9d08..2668d3e 100644 --- a/extensions/yii/composer/Installer.php +++ b/extensions/yii/composer/Installer.php @@ -100,25 +100,42 @@ class Installer extends LibraryInstaller protected function generateDefaultAlias(PackageInterface $package) { - $autoload = $package->getAutoload(); - if (empty($autoload['psr-0'])) { - return false; - } $fs = new Filesystem; $vendorDir = $fs->normalizePath($this->vendorDir); + $autoload = $package->getAutoload(); + $aliases = []; - foreach ($autoload['psr-0'] as $name => $path) { - $name = str_replace('\\', '/', trim($name, '\\')); - if (!$fs->isAbsolutePath($path)) { - $path = $this->vendorDir . '/' . $package->getName() . '/' . $path; + + if (!empty($autoload['psr-0'])) { + foreach ($autoload['psr-0'] as $name => $path) { + $name = str_replace('\\', '/', trim($name, '\\')); + if (!$fs->isAbsolutePath($path)) { + $path = $this->vendorDir . '/' . $package->getName() . '/' . $path; + } + $path = $fs->normalizePath($path); + if (strpos($path . '/', $vendorDir . '/') === 0) { + $aliases["@$name"] = '' . substr($path, strlen($vendorDir)) . '/' . $name; + } else { + $aliases["@$name"] = $path . '/' . $name; + } } - $path = $fs->normalizePath($path); - if (strpos($path . '/', $vendorDir . '/') === 0) { - $aliases["@$name"] = '' . substr($path, strlen($vendorDir)) . '/' . $name; - } else { - $aliases["@$name"] = $path . '/' . $name; + } + + if (!empty($autoload['psr-4'])) { + foreach ($autoload['psr-4'] as $name => $path) { + $name = str_replace('\\', '/', trim($name, '\\')); + if (!$fs->isAbsolutePath($path)) { + $path = $this->vendorDir . '/' . $package->getName() . '/' . $path; + } + $path = $fs->normalizePath($path); + if (strpos($path . '/', $vendorDir . '/') === 0) { + $aliases["@$name"] = '' . substr($path, strlen($vendorDir)); + } else { + $aliases["@$name"] = $path; + } } } + return $aliases; } diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 6c66691..617495c 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -59,6 +59,7 @@ Yii Framework 2 Change Log - Enh: Support for file aliases in console command 'message' (omnilight) - Enh: Sort and Pagination can now create absolute URLs (cebe) - Enh: Added support for using array-typed arguments for console commands (qiangxue) +- Enh: Added support for installing packages conforming to PSR-4 standard (qiangxue) - Chg #1519: `yii\web\User::loginRequired()` now returns the `Response` object instead of exiting the application (qiangxue) - Chg #1586: `QueryBuilder::buildLikeCondition()` will now escape special characters and use percentage characters by default (qiangxue) - Chg #1610: `Html::activeCheckboxList()` and `Html::activeRadioList()` will submit an empty string if no checkbox/radio is selected (qiangxue)