首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >symfony 4 twig重写默认变量

symfony 4 twig重写默认变量
EN

Stack Overflow用户
提问于 2018-06-12 02:37:47
回答 2查看 447关注 0票数 0

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

代码语言:javascript
复制
<div class="content-wrapper">
    {% if has_header|default(true) == true %}
         <!-- Header code -->
    {% endif %}
</div>

这是我的控制器

代码语言:javascript
复制
return $this->render('index.html.twig', [
    'has_header' => false
]);

但不幸的是,即使我添加了在false中添加了'has_header‘,它仍然运行头代码。如果有人能帮上忙那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-12 03:55:16

这里的问题是twig按如下方式编译您的代码:

代码语言:javascript
复制
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

代码语言:javascript
复制
function _twig_default_filter($value, $default = '') {
  if (twig_test_empty($value)) {
    return $default;
  }
  return $value;
}

进一步阅读源代码,您可以在函数twig_test_empty中看到问题所在

代码语言:javascript
复制
function twig_test_empty($value) {
  if ($value instanceof Countable) {
    return 0 == count($value);
  }
  return '' === $value || false === $value || null === $value || array() === $value;
}

TLDR的filter default也使用false来解决这个问题,您需要将代码更改为

代码语言:javascript
复制
{% if has_header is defined and has_header %}
票数 1
EN

Stack Overflow用户

发布于 2018-06-12 04:32:19

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

细枝

代码语言:javascript
复制
<div class="content-wrapper">
    {% if has_header|default('true') == 'true' %}
         <!-- Header code -->
    {% endif %}
</div>

控制器

代码语言:javascript
复制
return $this->render('index.html.twig', [
    'has_header' => 'false'
]);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50804088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档