Spec-Zone.ru › Twig 2

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>
« flush | from »

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API