Наткнулся на такой баг.
Имеется приложение, в нем есть тема:
web/themes/basic/views/layouts/main.twig
web/themes/basic/views/myModule/views/default/index.twig
в конфиге все это выглядит так:
Код: Выделить всё
'view' => [
'defaultExtension' => 'twig',
'class' => 'yii\web\View',
'renderers' => [
'twig' => [
'class' => 'yii\twig\ViewRenderer',
'options' => ['auto_reload' => true],
'globals' => ['html' => '\yii\helpers\Html'],
],
],
'theme' => [
'pathMap' => [
'@app/views' => '@webroot/themes/basic/views',
'@app/modules' => '@webroot/themes/basic/views'
],
'baseUrl' => '@web/themes/basic',
'basePath' => '@webroot/themes/basic'
],
],
APP/views/layouts/main.twig
APP/modules/myModule/views/index.twig
причем рендерятся в итоге правильные шаблоны из темы, но стоит удалить шаблоны из стандартных папок, все валится с ошибками, примерно такими:
The view file does not exist: XXX\www\modules\myModule\views\default\index.php
А все потому что метод findViewFile класса yii\base\View проверяет есть ли запрошенный файл шаблона в стандартной директории, и если нет, то просто присобачивает к имени файла расширение php и все. Далее в методе renderFile того же класса проверяется есть ли тема и если есть, то найденный путь несуществующего шаблона меняется на путь указанный в настройках темы и проверяется есть ли файл по полученному пути, а его там нет, так как мы ошибочно проверяем наличие php файла, возвращается исходный ошибочный путь и все падает с ошибкой.