如何在Twig中将变量从父模板传递给子模板?

时间:2016-06-04 12:17:04

标签: php html symfony templates twig

我正在与Symfony和Twig合作,我无法找到解决下一个问题的方法: 在我的父模板( index.html.twig )中,我有这样的代码:

<noscript>
    {% block noscript %}
    <div class="alert alert-warning">
        <strong>{% block notice %}{{ notice_js_disabled }}{% endblock %}&nbsp;</strong>
        {% block message %}{{ js_disabled }}{% endblock %}
    </div>
    {% endblock %}
</noscript>

我有子模板( category.html.twig ),该模板扩展了 index.html.twig 模板。

我可以将{{ notice_js_disabled }} var的值从索引模板传递到类别模板吗? 我的Symfony indexAction 控制器返回notice_js_disabled

UPD: 我创建的问题的解决方案,下一步: 我已经创建了一个名为main.html.twig的基本模板,我从控制器中渲染元素:

{% block header %}
   {{ render(controller('StoreBundle:Header:index')) }}
{% endblock %}

然后,在我的index.html.twig文件中,我做了下一件事:

{% extends 'Store/tpl/main.html.twig' %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
    <p class="currentPage" hidden>home</p>
    {{ parent() }}
{% endblock %}

我不确定这是正确的解决方案,但它的工作是:)

2 个答案:

答案 0 :(得分:0)

您需要做的是以下内容: - 在父模板中创建一个变量

SOURCE FORMAT

在您需要该值的模板之后

{% set notice_js_disabled = value_received_from_indexAction %}

我希望它可以帮到你

答案 1 :(得分:-2)

在Twig中,您可以将一些变量传递给子模板的唯一方法是使用 include 标记。

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

但是,通过这种方式,您不会从子项扩展某些父模板,但您正在做相反的事情:您将子模块放入当前模板。

symfony中只有几个变量全局 您可以在配置中设置一些自定义全局变量,如描述here

否则,您可以使用一些预定义的全局变量app变量。 (check it out here

我个人的建议是,您应该检查您的应用程序模板逻辑。

希望它有所帮助!