我正在使用Yii2
并且一直在阅读theming和theme 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/
中找到的文件。
现在,考虑到baseUrl
和basePath
设置,我对在这些情况下如何使用这些设置感到困惑。
现在,假设foo.php
引用文件中的图片文件,这是否仍会尝试查找@web/themes/current/images/myImage.jpg
而不是@web/themes/default/images/myImage.jpg
?
答案 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');
它将从当前主题目录中获取文件。