【问题标题】:symfony 4 twig override default variablesymfony 4 twig 覆盖默认变量
【发布时间】:2018-06-11 18:37:47
【问题描述】:

我在视图中设置了一个默认变量(Twig 模板)。但是当我尝试在控制器内部覆盖它时,它并没有发生。这是我的看法,

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

这是我的控制器,

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

但不幸的是,即使我添加了 add 'has_header' to false,它仍然运行标头代码。如果有人可以提供帮助,那就太好了。

【问题讨论】:

    标签: twig symfony4


    【解决方案1】:

    这里的问题是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 %}
    

    【讨论】:

    • 但也需要一个默认值:(
    • {% if not has_header is defined %}{% set has_header = true %}{% endif %}? :)
    【解决方案2】:

    不是实际的解决方案,但找到了解决方法,,,

    树枝

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

    控制器

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

    使用字符串而不是布尔值不是正确的方法,但认为它更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2023-04-07
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多