首页 文章

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

提问于
浏览
5

我找到下一个问题的解决方案:在我的父模板( 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的值从索引模板传递到类别模板吗?
notice_js_disabled 从我的Symfony indexAction 控制器返回 .

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 回答

  • -2

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

    {% set notice_js_disabled = value_received_from_indexAction %}
    

    在您需要该值的模板之后

    {{ notice_js_disabled }}
    

    我希望它对你有所帮助

  • 0

    在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中只有几个变量 global 您可以在配置中设置一些自定义全局变量,如here所述

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

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

    希望能帮助到你!

相关问题