嵌套树枝嵌入时我遇到了一些问题,特别是当两个嵌入都定义了相同的变量时。
示例:表单布局中的简单代码摘录,其中包含字段集,一些行和输入元素(为清晰起见,删除了一些变量):
{% 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中解决)?
答案 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
我已经完成了枝条,我认为它不存在。