Ответ 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, чтобы выполнять строгие сравнения и избегать проблем с манипуляциями с файлами.