Тесты
Тесты в Twig используются с оператором is для проверки значений.
{% if value is test_name %}
{% if value is not test_name %}
Тесты
constant
Проверяет, равно ли значение PHP-константе:
{% if status is constant('App\\Entity\\User::STATUS_ACTIVE') %}
Пользователь активен
{% endif %}
{# Константа объекта #}
{% if status is constant('STATUS_ACTIVE', user) %}
defined
Проверяет, определена ли переменная:
{% if user is defined %}
{{ user.name }}
{% endif %}
{% if user.address is defined %}
{{ user.address.city }}
{% endif %}
defined проверяет только существование переменной, а не её значение. Переменная может быть определена и равна null.
divisible by
Проверяет, делится ли число без остатка:
{% if loop.index is divisible by(3) %}
{# Каждый третий элемент #}
<hr>
{% endif %}
{% for i in 1..20 %}
{% if i is divisible by(5) %}
{{ i }} делится на 5
{% endif %}
{% endfor %}
empty
Проверяет, является ли значение «пустым»:
{% if items is empty %}
<p>Список пуст</p>
{% endif %}
{% if user.name is not empty %}
{{ user.name }}
{% endif %}
Считается пустым: false, 0, null, '' (пустая строка), [] (пустой массив).
even
Проверяет, является ли число чётным:
{% for user in users %}
<tr class="{{ loop.index is even ? 'even' : 'odd' }}">
<td>{{ user.name }}</td>
</tr>
{% endfor %}
odd
Проверяет, является ли число нечётным:
{% if value is odd %}
Нечётное число
{% endif %}
iterable
Проверяет, можно ли итерировать значение (массив или объект с Traversable):
{% if items is iterable %}
{% for item in items %}
{{ item }}
{% endfor %}
{% else %}
{{ items }}
{% endif %}
null
Проверяет, равно ли значение null:
{% if value is null %}
Значение не задано
{% endif %}
{# none - синоним null #}
{% if value is none %}
same as
Строгое сравнение (===), проверяет тип и значение:
{% if value is same as(false) %}
{# Именно false, а не 0, '' или null #}
{% endif %}
{% if count is same as(0) %}
{# Именно 0, а не false или '' #}
{% endif %}
mapping
Проверяет, является ли значение ассоциативным массивом (хешем):
{% if data is mapping %}
{# Это ассоциативный массив (хеш) #}
{% for key, value in data %}
{{ key }}: {{ value }}
{% endfor %}
{% endif %}
sequence
Проверяет, является ли значение последовательным (индексным) массивом:
{% if data is sequence %}
{# Это обычный массив с числовыми ключами #}
{% for item in data %}
{{ item }}
{% endfor %}
{% endif %}
Комбинирование тестов
{# Отрицание #}
{% if value is not empty %}
{% if user is not defined %}
{% if number is not even %}
{# С логическими операторами #}
{% if user is defined and user.name is not empty %}
{{ user.name }}
{% endif %}
{% if items is iterable and items is not empty %}
{% for item in items %}
{{ item }}
{% endfor %}
{% endif %}