Есть парочка предложений по поводу расширения yii2-twig:
1. Загрузчик файлов для твига должен быть Twig_Loader_Filesystem, так как в нем есть поддержка неймспейсов.
А они (неймспейсы) очень помогают не путаться в расположении шаблонов + более короткий и красивый путь к файлу.
Например:
Код: Выделить всё
{% extends "@layouts/common.twig" %}
Код: Выделить всё
public $namespaces = [];
Код: Выделить всё
$loader = new Loader\Filesystem;
foreach ($this->namespaces as $dir => $namespace) {
if ($path = \Yii::getAlias($dir, false)) {
$loader->addPath($path, $namespace);
}
}
$this->twig->setLoader($loader);
Таким образом в конфиге, можно указывать неймспейсы:
Код: Выделить всё
'view' => [
'defaultExtension' => 'twig',
'theme' => [
'basePath' => '@app/themes/default',
'baseUrl' => '@web/themes/default'
],
'renderers' => [
'twig' => [
'class' => '\yii\twig\ViewRenderer',
'cachePath' => '@runtime/twig/cache',
'globals' => [
'html' => '\yii\helpers\Html'
],
'filters' => [
'dump' => '\yii\helpers\BaseVarDumper::dump'
],
'namespaces' => [
'@app/themes/default/views/layouts' => 'layouts',
'@app/views/layouts' => 'layouts',
'@app/themes/default/views' => '__main__',
'@app/views' => '__main__'
]
]
]
]
2. Расширить загрузчик Twig_Loader_Filesystem, переопределив метод normalizeName:
Код: Выделить всё
class Filesystem extends \Twig_Loader_Filesystem
{
protected function normalizeName($name)
{
return parent::normalizeName(strtr($name, PATH_SEPARATOR, DIRECTORY_SEPARATOR));
}
}
Пример:
Код: Выделить всё
{% extends "@layouts:common.twig" %}