Spec-Zone.ru › Twig 1

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 True, если первая итерация
loop.last True, если последняя итерация
loop.length Количество элементов в последовательности
loop.parent Родительский контекст
{% for user in users %}
{{ loop.index }} - {{ user.username }}
{% endfor %}

Примечание

Переменные loop.length, loop.revindex, loop.revindex0, и loop.last доступны только для массивов PHP или объектов, реализующих интерфейс Countable. Они также недоступны при циклировании с условием.

Добавлено в версии 1.2: Поддержка модификатора if добавлена в Twig 1.2.

Добавление условия

Подсказка

Начиная с Twig 1.41, используйте фильтр 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/1.x/tags/for.html

Spec-Zone.ru

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