我正在尝试将“过滤器”过滤器的结果(从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不兼容。
谢谢