scope - Twig 嵌入和变量作用域

标签 scope twig embed

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

相关文章:

python - 全局变量以及何时需要声明它们

python - 组合总和python递归范围

javascript - Symfony2 assetic 导致 javascript 错误

php - 如何使用 Twig 显示动态图像 URL?

actionscript-3 - 在 AS3 中包含图像比嵌入更好的方法?

java - 无法解析连接变量

javascript - 如何在 JavaScript 中创建全局变量?

php - Grav/Twig 循环数组

discord.js - Discord GPT-3.5-Turbo 抛出未定义的错误

javascript - 如何使用JavaScript替换嵌入标签的src属性?