无法多次迭代“过滤器”过滤器

时间:2019-06-04 17:40:08

标签: twig twig-filter

我正在尝试将“过滤器”过滤器的结果(从Twig 2.10开始可用)分配给变量,以便可以多次使用它:

{% set filtered = collection|filter(element => element.ok) %}

但是不幸的是,如果我尝试对其进行多次迭代(使用“长度”过滤器计数),则会出现错误

  

无法遍历已经关闭的发电机

在第一个之后。该错误非常明显,即“过滤器”实际上返回一个生成器(我相信不能多次迭代)而不是数组或集合。

问题是它使得不可能编写以下代码,例如:

{% if filtered|length > 0 %}
<ul>
  {% for element in filtered %}
      <li>{{ element }}</li>
  {% endfor %}
</ul>
{% endif %}

此代码将触发for循环上的上述错误。

代替使用变量,我可以重新过滤原始集合,但是如果它包含很多元素,那似乎并不是最佳选择。 我还考虑过要编写自己的过滤器,并包装原始过滤器,但是如果没有必要,我的生活会更好。

还有什么更好的事情吗?应该认为这是Twig中的错误(在这种情况下,我将在其回购中发布一个问题)?

请注意,https://github.com/dpolac/twig-lambda并未表现出这种奇怪的行为,但与Twig 2.10不兼容。

谢谢

1 个答案:

答案 0 :(得分:0)

那确实是bug,现在是fixed