for
Перебирайте каждый элемент в последовательности. Например, чтобы отобразить список пользователей, предоставленных в переменной, названной users:
<h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
Примечание
Последовательность может быть массивом или объектом, реализующим интерфейс Traversable.
Если вам нужно итерировать по последовательности чисел, вы можете использовать оператор ..:
{% for i in 0..10 %}
* {{ i }}
{% endfor %}
Приведенный выше фрагмент кода выведет все числа от 0 до 10.
Он также может быть полезен с буквами:
{% for letter in 'a'..'z' %}
* {{ letter }}
{% endfor %}
Оператор .. может принимать любое выражение с обеих сторон:
{% for letter in 'a'|upper..'z'|upper %}
* {{ letter }}
{% endfor %}
Переменная loop
Внутри блока цикла for вы можете получить доступ к некоторым специальным переменным:
| Переменная | Описание |
|---|---|
loop.index | Текущая итерация цикла. (Индексируется с 1) |
loop.index0 | Текущая итерация цикла. (Индексируется с 0) |
loop.revindex | Номер итерации с конца цикла (индексируется с 1) |
loop.revindex0 | Номер итерации с конца цикла (индексируется с 0) |
loop.first | Истина, если первая итерация |
loop.last | Истина, если последняя итерация |
loop.length | Количество элементов в последовательности |
loop.parent | Контекст родителя |
{% for user in users %}
{{ loop.index }} - {{ user.username }}
{% endfor %}
Примечание
Переменные loop.length, loop.revindex, loop.revindex0, и loop.last доступны только для массивов PHP или объектов, реализующих интерфейс Countable. Они также недоступны при циклическом проходе с условием.
Добавление условия
Подсказка
Начиная с Twig 2.10, используйте фильтр filter вместо этого или условие if внутри тела for (если ваше условие зависит от переменной, обновляемой внутри цикла, и вы не используете переменную loop)
В отличие от PHP, в цикле невозможно break или continue. Однако вы можете отфильтровать последовательность во время итерации, что позволяет пропускать элементы. Следующий пример пропускает всех пользователей, которые не активны:
<ul>
{% for user in users if user.active %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
Преимущества заключаются в том, что специальная переменная цикла будет правильно считать, не считая пользователей, по которым не итерируются. Имейте в виду, что свойства, такие как loop.last, не будут определены при использовании условий цикла.
Примечание
Использование переменной loop внутри условия не рекомендуется, так как, вероятно, она не сделает того, чего вы ожидаете. Например, добавление условия, такого как loop.index > 4, не сработает, так как индекс увеличивается только тогда, когда условие истинно (поэтому условие никогда не будет соответствовать).
Оператор else
Если ни одна итерация не произошла из-за того, что последовательность была пустой, вы можете отобразить блок замены, используя else:
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% else %}
<li><em>no user found</em></li>
{% endfor %}
</ul>
Итерация по ключам
По умолчанию цикл итерируется по значениям последовательности. Вы можете итерироваться по ключам, используя фильтр keys:
<h1>Members</h1>
<ul>
{% for key in users|keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
Итерация по ключам и значениям
Вы также можете получить доступ к ключам и значениям:
<h1>Members</h1>
<ul>
{% for key, user in users %}
<li>{{ key }}: {{ user.username|e }}</li>
{% endfor %}
</ul>
Итерация по подмножеству
Возможно, вам нужно будет итерироваться по подмножеству значений. Этого можно достичь, используя фильтр slice:
<h1>Top Ten Members</h1>
<ul>
{% for user in users|slice(0, 10) %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
© 2009–2018 by the Twig Team
Licensed under the three clause BSD license.
The Twig logo is © 2010–2020 Symfony
https://twig.symfony.com/doc/2.x/tags/for.html