【发布时间】:2014-06-16 15:48:03
【问题描述】:
我想在 yii 2 中为我的所有树枝文件设置一个类似于 main.htm 的布局,但它会加载控制器首先调用的文件夹,所以我不能用扩展来调用我的布局。
在站点控制器中
public function actionIndex()
{
return $this->render('index.htm');
}
这段代码调用views/site/index.htm
在我的 index.htm 中
{% extends "main.html" %}
所以如果我把main.html放在site文件夹里是没有问题的,但是我想把它放在layout文件夹中,并且可以调用每个控制器视图..我该怎么做呢??
views
->site
->index.html
->layouts
->main.html
例如在symfony中我们可以这样调用
{% extends '::base.html.twig' %}
但是在 Yii2 中我找不到这样做的方法....
我已经通过硬编码文件 viewRenderer.php 完成了这项工作。这不是我喜欢的方式,因为作曲家更新更改已经消失...
现在函数 init 是这样的,这里的 loader 为空。我为我的布局添加了加载器。
$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 的核心文件中进行硬编码更改 ....
【问题讨论】:
标签: php frameworks twig yii2