了解Yii2在使用回退时如何找到主题资源

时间:2015-08-17 10:11:39

标签: php yii yii2

我正在使用Yii2并且一直在阅读themingtheme inheritance;但有一些问题:

考虑以下示例:

'view' => [
    'theme' => [
        'pathMap' => [
            '@app/views' => [
                '@app/themes/current',
                '@app/themes/default',
            ],
        ],
        'baseUrl' => '@web/themes/current',
        'basePath' => '@webroot/themes/current',
    ],
],

现在,假设我们请求主题文件foo;据我了解,首先会按以下顺序查找:

  • @app/themes/current/foo.php
  • @app/themes/default/foo.php
  • @app/views/foo.php

现在假设在foo.php主题中找不到@app/themes/current/,因此它会使用@app/themes/default/中找到的文件。

现在,考虑到baseUrlbasePath设置,我对在这些情况下如何使用这些设置感到困惑。

现在,假设foo.php引用文件中的图片文件,这是否仍会尝试查找@web/themes/current/images/myImage.jpg而不是@web/themes/default/images/myImage.jpg

2 个答案:

答案 0 :(得分:4)

在这种情况下,basePath毫无价值。因为basePath仅适用于 pathMap是空的。
basePath不是后备,它是pathMap的快捷方式,当您只有一个主题时可以快速使用。

'pathMap' => [
    '@app/views' => [
         '@app/themes/current/views',
    ],
],

相当于:

'basePath' => '@app/themes/current', 

(Yii了解文件夹@app/themes/current/views存在)

baseUrl:在视图文件中调用$this->theme->getBaseUrl()时会返回此信息。多主题不太值得。

关于静态文件的回退。主题后备不是为此目的而设计的。

答案 1 :(得分:2)

将链接指向文件,例如来自docs

$theme = $this->theme;

// returns: $theme->baseUrl . '/img/logo.gif'
$url = $theme->getUrl('img/logo.gif');

// returns: $theme->basePath . '/img/logo.gif'
$file = $theme->getPath('img/logo.gif');

它将从当前主题目录中获取文件。