gpt4 book ai didi

scope - Twig 嵌入和变量作用域

转载 作者:行者123 更新时间:2023-12-04 03:15:56 26 4
gpt4 key购买 nike

我在嵌套 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com