Тег for

 

 

Цикл 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.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, and loop.last могут быть использованы только при работе с PHP массивами или объектами, реализующими Countable интерфейс (т.е. интерфейс возвращающий значение фукнции count - количество элементов в массиве или количество свойств объекта). Данные переменные недоступны, если цикл содержит условия.
Поддержка модификатора if добавлена ​​в Twig 1.2.

 

 

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

 

В отличие от PHP, в данном случае нельзя прервать или продолжить цикл. Однако можно создавать правила прохождения последовательностей во время итераций, позволяющие пропускать или отбирать элементы по установленным критериям. В примере ниже неактивные пользователи пропускаются:

<ul>
    {% for user in users if user.active %}
        <li>{{ user.username|e }}</li>
    {% endfor %}
</ul>

 

Преимущество состоит в том, что переменная цикла будет считать корректно. Имейте в виду, что свойства, такие как loop.last, не будут определены при использовании условий цикла.

 

Использовать переменную цикла одновременно с условиями не рекомендуется, поскольку вы получите не тот результат, который ожидаете. Например, добавление условия 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

 

По умолчанию, цикл проходит по всем значениям последовательности. С помощью фильтра keys можно организовать перебор ключей массива:

<h1>Members</h1>
<ul>
    {% for key in users|keys %}
        <li>{{ key }}</li>
    {% endfor %}
</ul>

 

 

Итерации с ипользованием фильтров Keys и Value

 

Также вы можете вывести ключи и значеня одновременно

<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>

подписаться на рассылку

Я согласен на обработку моих данных

© Компания “Edgestile” 2004-2018 г.

Политика конфинденциальности