如何有条件地覆盖TWIG布局块?

sla*_*ros 21 php templates symfony twig

首先,让我从我试图使用的代码开始:

{% if modal == true %}
    {% block header %}{% endblock %}
    {% block footer %}{% endblock %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

我想要完成的是,如果名为modal的变量为true,则不显示我的页眉和页脚块.我在if语句下面也有这个:

{% block content %}
    {{ dump(modal) }}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

这里发生的是,无论modal的值是否为true,我的覆盖清空页眉和页脚块总是会运行.所以,我运行此模式传入的模式为false,结果是页眉和页脚仍然没有显示.dump命令的输出准确显示true或false,但条件似乎总是在if语句中计算为true.

块可以不包含在条件语句中,还是需要做一些额外的工作才能使其工作?

谢谢你尽你所能的帮助.

nat*_*nko 49

限定

{% block footer %}Some standard content{% endblock %}
Run Code Online (Sandbox Code Playgroud)

在父树枝模板中.然后在模板中,您要决定是否可以显示页脚的显示内容:

{% block footer %}
  {% if not modal == true %}
    {{ parent() }}
  {% endif %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

如果模态为真 - 页脚将为空,如果不是 - 页脚将打印"一些标准内容"

  • 虽然接受的答案是正确的,但这个答案采用了这种方法,并展示了如何实际实现该解决方案.{{parent()}}的+1 (6认同)

Wou*_*r J 24

块不关心它周围的任何逻辑,如文档所述:

块提供了一种方法来更改模板的某个部分的呈现方式,但它不会以任何方式干扰模板周围的逻辑.

您应该将该逻辑放在块中,而不是放在外部,正如您在该文章的最后一个示例中所看到的那样.