diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 539bc00d34..e0a0a77819 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -9,6 +9,7 @@ Yii Framework 2 Change Log - Enh #6247: Logger and error handler are now using slightly less memory (stepanselyuk, samdark) - Enh #6434: Added `yii\behaviors\SluggableBehavior::immutable` to support keeping the generated slug unchanged (trntv) - Enh #6467: `ActiveForm` will scroll to the nearest visible element when the first error input is hidden (newartix) +- Enh #6488: Support changing `yii\base\Theme::basePath` during runtime (qiangxue) - Chg #6427: In case of invalid route web application now throws exception with "Page not found" instead of "Invalid Route" (cebe, samdark) 2.0.1 December 07, 2014 diff --git a/framework/base/Theme.php b/framework/base/Theme.php index b89877bad3..d079812d5c 100644 --- a/framework/base/Theme.php +++ b/framework/base/Theme.php @@ -73,29 +73,12 @@ class Theme extends Component { /** * @var array the mapping between view directories and their corresponding themed versions. - * If not set, it will be initialized as a mapping from [[Application::basePath]] to [[basePath]]. * This property is used by [[applyTo()]] when a view is trying to apply the theme. * Path aliases can be used when specifying directories. + * If this property is empty or not set, a mapping [[Application::basePath]] to [[basePath]] will be used. */ public $pathMap; - - /** - * Initializes the theme. - * @throws InvalidConfigException if [[basePath]] is not set. - */ - public function init() - { - parent::init(); - - if (empty($this->pathMap)) { - if (($basePath = $this->getBasePath()) === null) { - throw new InvalidConfigException('The "basePath" property must be set.'); - } - $this->pathMap = [Yii::$app->getBasePath() => [$basePath]]; - } - } - private $_baseUrl; /** @@ -142,11 +125,21 @@ class Theme extends Component * If there is no corresponding themed file, the original file will be returned. * @param string $path the file to be themed * @return string the themed file, or the original file if the themed version is not available. + * @throws InvalidConfigException if [[basePath]] is not set */ public function applyTo($path) { + $pathMap = $this->pathMap; + if (empty($pathMap)) { + if (($basePath = $this->getBasePath()) === null) { + throw new InvalidConfigException('The "basePath" property must be set.'); + } + $pathMap = [Yii::$app->getBasePath() => [$basePath]]; + } + $path = FileHelper::normalizePath($path); - foreach ($this->pathMap as $from => $tos) { + + foreach ($pathMap as $from => $tos) { $from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR; if (strpos($path, $from) === 0) { $n = strlen($from);