树枝模板布局Yii2框架

时间:2014-06-16 15:48:04

标签: php frameworks twig yii2

我想为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的核心文件中的硬编码更改....

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用完整路径{% extends "main.html" %}。像{% extends "\layouts\main.html" %}

这样的东西

甚至是{% extends "@app/views/layouts/main.html" %}

我没有用过yii的树枝,但值得一试。

相关问题