Подтвердить что ты не робот

Как работают операторы сравнения строк в Twig?

Как это возможно? Кажется, это очень странная проблема (если только Im не пропустил что-то очень простое):

код:

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

Вывод:

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

Screenshot

В принципе, он выводит, если true, но не предназначен для проверки подлинности.

4b9b3361

Ответ 1

Это легко воспроизводится:

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

Отображает ok.

В соответствии с документацией:

Twig допускает выражения везде. Эти работы очень похожи на регулярные PHP, и даже если вы не работаете с PHP, вы должны чувствовать комфортно с ним.

И если вы проверите в чистом PHP следующее выражение:

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

Он также будет отображаться в порядке.

Дело в том, что вы не должны сравнивать переменные разных типов. Здесь вы сравниваете bool со строкой: если ваша строка не пуста или если она не содержит только нули, она будет оцениваться как true.

Вы также можете взглянуть на руководство PHP, чтобы узнать, как делается сравнение с разными типами.

Изменить

Вы можете использовать тест sameas, чтобы выполнять строгие сравнения и избегать проблем с манипуляциями с файлами.