Twig 模板布局 Yii2 框架
Posted
技术标签:
【中文标题】Twig 模板布局 Yii2 框架【英文标题】:Twig Template Layout Yii2 Framework 【发布时间】: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 的核心文件中进行硬编码更改 ....
【问题讨论】:
github.com/yiisoft/yii2/pull/3907 【参考方案1】:您是否尝试过在此处使用完整路径% extends "main.html" %
。类似% extends "\layouts\main.html" %
甚至% extends "@app/views/layouts/main.html" %
我没有用twig和yii,但是值得一试。
【讨论】:
是的,我都试过了,如果你使用完整路径,只需像这样在站点文件夹之后添加并再次给出错误。比如 site/\layouts\main.html 或 site/@app/views/layouts/main.html。因为 twig 模板加载器文件夹在 viewRenderer.php 中定义为控制器视图文件夹 ...以上是关于Twig 模板布局 Yii2 框架的主要内容,如果未能解决你的问题,请参考以下文章