Twig变量范围 - 全局仅在循环

时间:2017-05-24 15:08:44

标签: scope twig drupal-8

我有一个对象变量,当从里面 for x in y循环访问时,它只包含数据。

这发生在Drupal 8主题的字段模板中,其目标是访问兄弟字段的值。

简化代码段:

{% for x in [1] %}
  Inside loop = {{ _parent.element['#object'].get('field_section_theme').value }}
{% endfor %}

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}

输出:

Inside loop = normal
Outside loop =

我理解在循环中 set 的变量是否在其外部不可用,但这与模板本身的_context无关。

我在一个简单的一次性for循环中包装对变量的引用的解决方法已经解决了我的问题,但我很想知道这里发生了什么!

(我也更喜欢比for x in [1]方法更清洁的方法,但通常只要你想要写出来就执行一些东西!)

1 个答案:

答案 0 :(得分:2)

这是一个范围错误,基于我对_parent的定义方式和位置的误解 - 我认为它是由Drupal提供的,逻辑上我正在渲染的字段的“父”是节点实体,它又包含我想要引用的其他字段。

但是_parent似乎是一个树枝构造,在循环中的_parent 指向模板的主要范围,而{{ 1}} 外面循环毫无意义。

事后看来这很明显,但是因为我的代码在一个循环中开始生活并且 self>父母>兄弟姐妹路径我使用有意义(在Drupal上下文中)我无法理解为什么变量在循环外不可用。

我根本找不到有关_parent的有用文档,所以任何链接都会受到赞赏。

修复我的特定问题就像从“外部循环”访问路径中删除_parent一样简单,即更改

_parent

Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}