首页 文章

Twig嵌入和变量范围

提问于
浏览
1

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

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

{% 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中,它没有定义一个) . 但是当我查看输出的html代码时,我看到formrow带有#myFieldset,这是在frmGroup嵌入时设置的id . 不是我想要完成的:)

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

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

1 回答

  • 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

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

相关问题