我想为yii 2中的所有twig文件设置类似main.htm的布局,但它会加载控制器首先调用的文件夹,因此我无法使用extends调用我的布局。
SiteController中的
public function actionIndex()
{
return $this->render('index.htm');
}
此代码调用views / site / index.htm
在我的index.htm
中{% extends "main.html" %}
因此,如果我将main.html放在站点文件夹中,没有问题,但是我想将它放在布局文件夹中,并且可以调用每个控制器视图。我该怎么办?
views
->site
->index.html
->layouts
->main.html
例如在symfony中我们可以像这样调用
{% extends '::base.html.twig' %}
但是在Yii2中,我找不到办法做到这一点......
我用硬编码的文件viewRenderer.php完成了这项工作。这不是我喜欢的方式,因为作曲家更新后的更改已经消失......
现在函数init就像这样,这里的loader为null。我为我的布局添加了加载器。
$this->twig = new \Twig_Environment(null, array_merge([
'cache' => Yii::getAlias($this->cachePath),
'charset' => Yii::$app->charset,
], $this->options));
添加装载机后..
$this->loader = new \Twig_Loader_Filesystem($_SERVER["DOCUMENT_ROOT"].'\views\layouts');
最后一件事是ViewRenderer.php中的渲染功能
public function render($view, $file, $params)
{
$this->twig->addGlobal('this', $view);
//$this->twig->setLoader(new TwigSimpleFileLoader(dirname($file)));
$this->loader->addPath(dirname($file));
return $this->twig->render(pathinfo($file, PATHINFO_BASENAME), $params);
}
我希望它没有yii2-twig的核心文件中的硬编码更改....
答案 0 :(得分:0)
您是否尝试过使用完整路径{% extends "main.html" %}
。像{% extends "\layouts\main.html" %}
甚至是{% extends "@app/views/layouts/main.html" %}
我没有用过yii的树枝,但值得一试。