переменная по умолчанию для ветки symfony 4 - PullRequest
0 голосов
/ 11 июня 2018

Я установил переменную по умолчанию в моем представлении (шаблон Twig).Но когда я пытаюсь переопределить его внутри контроллера, это не происходит.Это мой взгляд,

<div class="content-wrapper">
    {% if has_header|default(true) == true %}
         <!-- Header code -->
    {% endif %}
</div>

Это мой контроллер,

return $this->render('index.html.twig', [
    'has_header' => false
]);

Но, к сожалению, даже я добавил has has'header 'в false он все еще работаеткод заголовкаБыло бы здорово, если бы кто-то мог помочь.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Не фактическое решение, но нашел обходной путь для этого ,,,

TWIG

<div class="content-wrapper">
    {% if has_header|default('true') == 'true' %}
         <!-- Header code -->
    {% endif %}
</div>

Контроллер

return $this->render('index.html.twig', [
    'has_header' => 'false'
]);

с использованием строк вместо логических значений не являетсяправильный путь, но думаю, что это проще.

0 голосов
/ 11 июня 2018

Проблема здесь в том, что 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 %}
...