mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	Fixes #6488: Support changing yii\base\Theme::basePath during runtime
				
					
				
			This commit is contained in:
		@ -9,6 +9,7 @@ Yii Framework 2 Change Log
 | 
				
			|||||||
- Enh #6247: Logger and error handler are now using slightly less memory (stepanselyuk, samdark)
 | 
					- 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 #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 #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)
 | 
					- 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
 | 
					2.0.1 December 07, 2014
 | 
				
			||||||
 | 
				
			|||||||
@ -73,29 +73,12 @@ class Theme extends Component
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * @var array the mapping between view directories and their corresponding themed versions.
 | 
					     * @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.
 | 
					     * This property is used by [[applyTo()]] when a view is trying to apply the theme.
 | 
				
			||||||
     * Path aliases can be used when specifying directories.
 | 
					     * 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;
 | 
					    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;
 | 
					    private $_baseUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -142,11 +125,21 @@ class Theme extends Component
 | 
				
			|||||||
     * If there is no corresponding themed file, the original file will be returned.
 | 
					     * If there is no corresponding themed file, the original file will be returned.
 | 
				
			||||||
     * @param string $path the file to be themed
 | 
					     * @param string $path the file to be themed
 | 
				
			||||||
     * @return string the themed file, or the original file if the themed version is not available.
 | 
					     * @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)
 | 
					    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);
 | 
					        $path = FileHelper::normalizePath($path);
 | 
				
			||||||
        foreach ($this->pathMap as $from => $tos) {
 | 
					
 | 
				
			||||||
 | 
					        foreach ($pathMap as $from => $tos) {
 | 
				
			||||||
            $from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR;
 | 
					            $from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR;
 | 
				
			||||||
            if (strpos($path, $from) === 0) {
 | 
					            if (strpos($path, $from) === 0) {
 | 
				
			||||||
                $n = strlen($from);
 | 
					                $n = strlen($from);
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user