Twig嵌入和变量范围

时间:2016-12-06 10:10:47

标签: scope twig embed

嵌套树枝嵌入时我遇到了一些问题,特别是当两个嵌入都定义了相同的变量时。

示例:表单布局中的简单代码摘录,其中包含字段集,一些行和输入元素(为清晰起见,删除了一些变量):

{% embed 'components/frmGroup' with {'id':'myFieldset'} %}
    {% block main %}
        {% embed 'components/frmRow' with {'id':'mySpecialFormRow'} %}
            {% block main %}
                {% include 'components/inpText' %}
                ...
            {% endblock %}
        {% endembed %}
        {% embed 'components/frmRow' %}
            {% block main %}
                {% include 'components/inpText' %}
                ...
            {% endblock %}
        {% endembed %}
    {% endblock %}
{% endembed %}

如您所见,frmGroup(fieldset)和frmRow(row)组件都可以使用变量id。第一个frmRow嵌入很好,因为它定义了自己的id,问题出现在第二个frmRow上,它不需要特定的id(因此没有定义一个)。但是当我查看输出的html代码时,我看到formrow带有#myFieldset,这是在frmGroup嵌入时设置的id。不是我想要完成的事情:))

我尝试使用“only”关键字,但这给了我一些非常奇怪的结果。我可以使用不同的变量名(frmGroupId和frmRowId),但感觉很蹩脚(并创建混乱),我也可以在第二个frmRow上显式定义和清空id,但是我必须记住在嵌套嵌入上定义的变量,也不漂亮。

那么如何解决这个问题(可以在Twig中解决)?

1 个答案:

答案 0 :(得分:0)

我尝试了你的例子,我的结果非常正常:

{% set id = "1" %}
{# id is 1 #}
{% embed "_test.html.twig" with { id: "2"} only %}
    {# id is 2 for the scope #}
    {% block main %}
        {% embed "_test.html.twig" with { id: "3"} %} 
           {# id is 3 for the scope #}
        {% endembed %}
        {% embed "_test.html.twig" %}
           {# id value is still 2 #}
        {% endembed %}
    {% endblock %}
{% endembed %}
{% embed "@_test.html.twig" %}
    {# id value is 1 #}
{% endembed %}

使用_test.html.twig:

{% block main %}
 {{ id|default('null') }}
{% endblock %}

返回

  

3 2 1

唯一的想法是我能想到你使用临时变量:

{% embed "@InddigoMain/_test.html.twig" with { id: "2"} %}
    {% block main %}
        {% embed "@InddigoMain/_test.html.twig" with { id: "3"}  %}
        {% endembed %}
        {% set temp = id %}
        {% set id = null %}
        {% embed "@InddigoMain/_test.html.twig" %}
        {% endembed %}
        {% set id = temp %}
    {% endblock %}
{% endembed %}
{% embed "@InddigoMain/_test.html.twig"  %}
{% endembed %}

返回

  

3 null 1

我已经完成了枝条,我认为它不存在。