我在嵌套 Twig 嵌入时遇到了一些问题,尤其是当两个嵌入都定义了相同的变量时。
一个例子:一个简单的代码摘自带有字段集、一些行和输入元素的表单布局(为清楚起见删除了一些变量):
{% 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 中解决)?
最佳答案
我试过你的例子,我得到了完全正常的结果:
{% 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
我已经检查过 Twig 束,但我认为它不存在。
关于scope - Twig 嵌入和变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40992746/