Не могу повторить фильтр «фильтр» несколько раз - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь присвоить результат фильтра «filter» (доступен начиная с Twig 2.10) переменной, чтобы я мог использовать его несколько раз:

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

Но, к сожалению, если я попытаюсь выполнить итерацию несколько раз (с использованием фильтра "length", как такового), я получу ошибку

Невозможно пройти через уже закрытый генератор

после первого. Ошибка совершенно очевидна: «фильтр» на самом деле возвращает генератор (который, я считаю, не может быть повторен несколько раз), а не массив или коллекцию.

Проблема в том, что невозможно написать следующий код, например:

{% 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 голосов
/ 20 июня 2019

Это действительно была ошибка , и теперь она исправлена ​​

...