Tests

Same as

same as checks if a variable is the same as another variable. This is the equivalent to ===in PHP:

{% if foo.attribute is same as(false) %}
    the foo attribute really is the 'false' PHP value
{% endif %}

Odd

odd returns true if the given number is odd:

{{ var is odd }}

Null

null returns true if the variable is null:

{{ var is null }}

none is an alias for null.

Iterable

iterable checks if a variable is an array or a traversable object:

{# evaluates to true if the foo variable is iterable #}
{% if users is iterable %}
    {% for user in users %}
        Hello {{ user }}!
    {% endfor %}
{% else %}
    {# users is probably a string #}
    Hello {{ users }}!
{% endif %}

Even

even returns true if the given number is even:

{{ var is even }}

Empty

empty checks if a variable is empty:

{# evaluates to true if the foo variable is null, false, an empty array, or the empty string #}
{% if foo is empty %}
    ...
{% endif %}

Divisible by

divisible by checks if a variable is divisible by a number:

{% if loop.index is divisible by(3) %}
    ...
{% endif %}

Defined

defined checks if a variable is defined in the current context. This is very useful if you use the strict_variables option:

{# defined works with variable names #}
{% if foo is defined %}
    ...
{% endif %}

{# and attributes on variables names #}
{% if foo.bar is defined %}
    ...
{% endif %}

{% if foo['bar'] is defined %}
    ...
{% endif %}

When using the defined test on an expression that uses variables in some method calls, be sure that they are all defined first:

{% if var is defined and foo.method(var) is defined %}
    ...
{% endif %}

Constant

constant checks if a variable has the exact same value as a constant. You can use either global constants or class constants:

{% if post.status is constant('Post::PUBLISHED') %}
    the status attribute is exactly the same as Post::PUBLISHED
{% endif %}

You can test constants from object instances as well:

{% if post.status is constant('PUBLISHED', post) %}
    the status attribute is exactly the same as Post::PUBLISHED
{% endif %}