【问题标题】:Twig Template Layout Yii2 FrameworkTwig 模板布局 Yii2 框架
【发布时间】: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


【解决方案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 中定义为控制器视图文件夹 ...
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
相关资源
最近更新 更多