小枝模板布局ii框架


Twig Template Layout Yii2 Framework

我想在yii 2中为我的所有分支文件设置一个像main.htm这样的布局,但它首先加载控制器调用的文件夹,所以我不能用extends调用我的布局。

在SiteController

public function actionIndex()
{
    return $this->render('index.htm');
}

此代码调用views/site/index.htm

In my index.htm

{% extends "main.html" %}

所以如果我把main。html放在site文件夹中,没有问题,但是我想把它放在布局文件夹中,可以调用每个控制器视图。我怎么能做到呢?

views
->site
  ->index.html
->layouts
  ->main.html

例如在symfony中我们可以这样调用

{% extends '::base.html.twig' %}

但是在Yii2中我找不到这样做的方法....

我已经完成了硬编码文件viewRenderer.php。这不是我喜欢的方式,因为一个作曲家更新的变化消失了…

init函数是这样的加载器是空的。我已经为我的布局添加了加载器。

$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 ....

您是否尝试过在这里使用完整路径{% extends "main.html" %} ?比如{% extends "'layouts'main.html" %}

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

我没有在yii中使用过twig,但是值得一试。