Home » Php » php – How do string comparison operators work in Twig?

php – How do string comparison operators work in Twig?

Posted by: admin April 23, 2020 Leave a comment

Questions:

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.

How to&Answers:

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.