From d22e8ea34b589830d896d703396b3912fdf186b7 Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Thu, 18 Apr 2013 15:46:01 -0400 Subject: [PATCH] Added YiiBase::importNamespaces(). --- framework/YiiBase.php | 24 ++++++++++++++++++++++++ framework/base/Application.php | 12 ------------ framework/web/AssetBundle.php | 4 ++-- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/framework/YiiBase.php b/framework/YiiBase.php index c32cc28..9d501b1 100644 --- a/framework/YiiBase.php +++ b/framework/YiiBase.php @@ -139,6 +139,30 @@ class YiiBase } /** + * Imports a set of namespaces. + * + * By importing a namespace, the method will create an alias for the directory corresponding + * to the namespace. For example, if "foo\bar" is a namespace associated with the directory + * "path/to/foo/bar", then an alias "@foo/bar" will be created for this directory. + * + * This method is typically invoked in the bootstrap file to import the namespaces of + * the installed extensions. By default, Composer, when installing new extensions, will + * generate such a mapping file which can be loaded and passed to this method. + * + * @param array $namespaces the namespaces to be imported. The keys are the namespaces, + * and the values are the corresponding directories. + */ + public static function importNamespaces($namespaces) + { + foreach ($namespaces as $name => $path) { + if ($name !== '') { + $name = '@' . str_replace('\\', '/', $name); + static::setAlias($name, $path); + } + } + } + + /** * Translates a path alias into an actual path. * * The translation is done according to the following procedure: diff --git a/framework/base/Application.php b/framework/base/Application.php index e0d0237..88dfcb9 100644 --- a/framework/base/Application.php +++ b/framework/base/Application.php @@ -56,11 +56,6 @@ class Application extends Module * If this is false, layout will be disabled. */ public $layout = 'main'; - /** - * @var array list of installed extensions. The array keys are the extension names, and the array - * values are the corresponding extension root source directories or path aliases. - */ - public $extensions = array(); private $_ended = false; @@ -92,13 +87,6 @@ class Application extends Module throw new InvalidConfigException('The "basePath" configuration is required.'); } - if (isset($config['extensions'])) { - foreach ($config['extensions'] as $name => $path) { - Yii::setAlias("@$name", $path); - } - unset($config['extensions']); - } - $this->registerErrorHandlers(); $this->registerCoreComponents(); diff --git a/framework/web/AssetBundle.php b/framework/web/AssetBundle.php index 76d901f..124f5e6 100644 --- a/framework/web/AssetBundle.php +++ b/framework/web/AssetBundle.php @@ -89,7 +89,7 @@ class AssetBundle extends Object * @var array the options to be passed to [[AssetManager::publish()]] when the asset bundle * is being published. */ - public $publishOption = array(); + public $publishOptions = array(); /** * Initializes the bundle. @@ -119,7 +119,7 @@ class AssetBundle extends Object } if ($this->sourcePath !== null) { - list ($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOption); + list ($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOptions); } foreach ($this->js as $js => $options) {