Scottymeuk
Scottymeuk

Reputation: 801

How do string comparison operators work in Twig?

How is this possible? It seems to be a very very odd issue (unless I’m missing something very simple):

Code:

{{ dump(nav) }}
{% if nav == "top" %}
    <div class="well">This would be the nav</div>
{% endif %}

Output:

boolean true
<div class="well">This would be the nav</div>

Screenshot

Basically, it is outputting if true, but it’s not meant to be checking for true.

Upvotes: 46

Views: 124400

Answers (2)

Vlad Moyseenko
Vlad Moyseenko

Reputation: 223

If someone needs to negate result of the string comparison statement use next construction:

{% set is_training = course_type == 'training' %}
...
{% if not is_training %}
...

Upvotes: 0

Alain
Alain

Reputation: 36954

This is easily reproductible :

{% set nav = true %}
{% if nav == "top" %}
ok
{% endif %}

Displays ok.

According to the documentation :

Twig allows expressions everywhere. These work very similar to regular PHP and even if you're not working with PHP you should feel comfortable with it.

And if you test in pure PHP the following expression :

$var = true;
if ($var == "top") {
  echo 'ok';
}

It will also display ok.

The point is : you should not compare variables of different types. Here, you compare a bool with a string : if your string is not empty or if it does not contains only zeros, it will evaluate to true.

You can also have a look to the PHP manual to see how comparison are made with different types.

Edit

You can use the sameas test to make strict comparisions, and avoid type juggling matters.

Upvotes: 58

Related Questions