Twig. 覆盖已设置的变量

4

我已经尝试解决这个问题,这个问题在这个问题中被问到。 https://github.com/fabpot/Twig/issues/1244

但是对于我来说,不知道为什么那个解决方法并没有起作用...

#layout.html.twig
{{ show }}

#base1.html.twig
{% extends 'layout.html.twig' %}
{% set show = 0 %}

#base2.html.twig
{% extends 'base1.html.twig' %}
{% set show = 1 %}

但是当我渲染 base2 时,我只看到了0 ... 为什么不是1呢?

1个回答

2

对我来说完美地运作。我猜这是一个块级问题。也许你的base1块出现在base2块之后并覆盖了值。

例如,使用以下代码会出现问题:

#base2.html.twig
{% extends 'base1.html.twig' %}
{% block content %}
    {% set show = 1 %}
    {{ parent() }}
    {{ show }}
{% endblock %}

你应该尝试这个:

#layout.html.twig
{% block content %}
    {% set show = 0 %}
    {{ show }}
{% endblock %}

#base1.html.twig
{% extends 'layout.html.twig' %}
{% block content %}
    {{ parent() }}
    {% set show = 1 %}
    {{ show }}
{% endblock %}

#base2.html.twig
{% extends 'base1.html.twig' %}
{% block content %}
    {{ parent() }}
    {% set show = 2 %}
    {{ show }}
{% endblock %}

在每个继承过程中显示show变量,可以帮助您看到出现了什么问题。最终的响应应该显示0 1 2

调用parent()不会输出0吗? 结果不是00 10 2吗? - gondo
@gondo,是的,调用 parent() 会输出先前的变量。所以正如我所说,最终的响应将是 0 1 20 表示布局,0 1 表示第一个基类,而 0 1 2 则表示第二个基类。 - Einenlum
我明白了,谢谢你的澄清。我以为你的“最终回复”是针对每个块的。 - gondo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接