Разработка того, как Yii2 находит тематические ресурсы при использовании резервных копий
Я использую Yii2
и читаю о theming и наследование темы; однако есть некоторые вопросы:
Рассмотрим следующий пример:
'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
?
Ответы
Ответ 1
В этом случае 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()
в файл вида. Меньше стоит с несколькими темами.
О возврате для статических файлов. Резервирование Theming не предназначено для этой цели.
Ответ 2
Направьте свои ссылки внутри файла, как этот exmaple, из 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');
Он получит файл из текущего каталога тем.