【问题标题】:Twig render other controller from base viewTwig 从基本视图渲染其他控制器
【发布时间】:2018-10-26 12:05:36
【问题描述】:

我正在单独使用 twig,而不是在 Symfony 中。

我有基本布局 base.html。其他布局扩展了该布局,并且似乎可以正常工作。

如果我有一个控制器操作 BlogPosts 传递一组博客文章,我会渲染博客布局,该布局从基本布局扩展以查看该内容。按预期工作

现在,我想将变量传递给基本模板,以便在每个页面上都可见。我该怎么做?

我找到了this article,但它提到了 symfony。 twig 本身没有渲染功能。

【问题讨论】:

  • 哎呀。这是不好的做法。控制器应该已经完成​​了他们的工作,收集了视图变量,并将它们发送到视图进行渲染。跳出 Twig 并进入另一个控制器动作似乎是一个非常糟糕的主意。你为什么要那样做?
  • 考虑在您的BlogPosts 中添加一个公共方法,并将该方法的结果作为全局变量添加到twig 中,或者编写一个能够调用该公共方法的自定义twig function /跨度>

标签: php twig


【解决方案1】:

如果你使用没有 symfony 的 twig,我假设你的项目目录结构是这样的:

project
  - templates
     - base.html.twig
     - index.html.twig
  - vendor
  - index.php

所以,你的 index.php 代码应该是这样的:

require_once 'vendor/autoload.php';
$loader = new Twig_Loader_Filesystem('templates', getcwd());
$twig = new Twig_Environment($loader);

echo $twig->render('index.html.twig', array('name' => 'Hello'));

所以,如果你想将一些变量传递给你的基本模板,twig 有方法来增加全局使用的价值

require_once 'vendor/autoload.php';
$loader = new Twig_Loader_Filesystem('templates', getcwd());
$twig = new Twig_Environment($loader);
$twig->addGlobal('title', 'HomePage');

echo $twig->render('index.html.twig', array('name' => 'Hello'));

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2015-08-01
    相关资源
    最近更新 更多