Проблема здесь в том, что twig
компилирует ваш код следующим образом:
if ((((array_key_exists("has_header", $context)) ? (_twig_default_filter((isset($context["has_header"]) || array_key_exists("has_header", $context) ? $context["has_header"] : (function () { throw new Twig_Error_Runtime('Variable "has_header" does not exist.', 2, $this->source); })()), true)) : (true)) == true)) {
Как видите, ваша переменная передается функции _twig_default_filter
function _twig_default_filter($value, $default = '') {
if (twig_test_empty($value)) {
return $default;
}
return $value;
}
Читая далее в источнике, вы можете увидеть, что проблема лежит в функции twig_test_empty
function twig_test_empty($value) {
if ($value instanceof Countable) {
return 0 == count($value);
}
return '' === $value || false === $value || null === $value || array() === $value;
}
TLDR Фильтр Twig default
также включается в false
Для решенияэта проблема вам нужно будет изменить свой код на
{% if has_header is defined and has_header %}