Перейти к основному содержимому

Тесты

Тесты в Twig используются с оператором is для проверки значений.

twig-tests
{% if value is test_name %}
{% if value is not test_name %}

Тесты​

constant​

Проверяет, равно ли значение PHP-константе:

constant
{% if status is constant('App\\Entity\\User::STATUS_ACTIVE') %}
Пользователь активен
{% endif %}

{# Константа объекта #}
{% if status is constant('STATUS_ACTIVE', user) %}

defined​

Проверяет, определена ли переменная:

defined
{% if user is defined %}
{{ user.name }}
{% endif %}

{% if user.address is defined %}
{{ user.address.city }}
{% endif %}
совет

defined проверяет только существование переменной, а не её значение. Переменная может быть определена и равна null.

divisible by​

Проверяет, делится ли число без остатка:

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​

Проверяет, является ли значение «пустым»:

empty
{% if items is empty %}
<p>Список пуст</p>
{% endif %}

{% if user.name is not empty %}
{{ user.name }}
{% endif %}

Считается пустым: false, 0, null, '' (пустая строка), [] (пустой массив).

even​

Проверяет, является ли число чётным:

even
{% for user in users %}
<tr class="{{ loop.index is even ? 'even' : 'odd' }}">
<td>{{ user.name }}</td>
</tr>
{% endfor %}

odd​

Проверяет, является ли число нечётным:

odd
{% if value is odd %}
Нечётное число
{% endif %}

iterable​

Проверяет, можно ли итерировать значение (массив или объект с Traversable):

iterable
{% if items is iterable %}
{% for item in items %}
{{ item }}
{% endfor %}
{% else %}
{{ items }}
{% endif %}

null​

Проверяет, равно ли значение null:

null
{% if value is null %}
Значение не задано
{% endif %}

{# none - синоним null #}
{% if value is none %}

same as​

Строгое сравнение (===), проверяет тип и значение:

same as
{% if value is same as(false) %}
{# Именно false, а не 0, '' или null #}
{% endif %}

{% if count is same as(0) %}
{# Именно 0, а не false или '' #}
{% endif %}

mapping​

Проверяет, является ли значение ассоциативным массивом (хешем):

mapping
{% if data is mapping %}
{# Это ассоциативный массив (хеш) #}
{% for key, value in data %}
{{ key }}: {{ value }}
{% endfor %}
{% endif %}

sequence​

Проверяет, является ли значение последовательным (индексным) массивом:

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