有条件地在 twig 2 中定义一个块

Dev*_*key 5 templating symfony twig

所以这是用例:

  • 在动态页面结构中渲染登录表单块,但前提是用户未经身份验证
  • 如果未经身份验证,则不得定义块(以保留动态页面结构)

树枝 2.2
交响乐 3.2


在基本模板中,我仅渲染已定义的块(不是“非空”)

base.html.twig

{% if block('left_sidebar') is defined %}
      <div class="col-md-2">
           {{- block('left_sidebar') -}}
      </div>
      <div class="col-md-10">
{% else %}
      <div class="col-md-12">
{% endif %}
Run Code Online (Sandbox Code Playgroud)

索引.html.twig

为了使上述工作正常,块根本无法定义(这完全是设计的)。无论如何,以下内容都会渲染该块,但我无法弄清楚为什么。

{% if not is_granted('IS_FULLY_AUTHENTICATED') %}
    {% block left_sidebar %}
        {% include ':blocks:block__login.html.twig' %}
    {% endblock %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

我想知道这是否不起作用,因为与基本模板代码起作用的原因相同。也就是说,块在运行时之前编译,条件语句在运行时执行。

任何人都可以确认我是对的吗?或者如果我错了请纠正我?

编辑

我尝试将条件的结果强制为 true 和 false,并且在任何一种情况下都会呈现该块。

Dev*_*key 1

因此,总结一下,因为这似乎是在一些地方发生的问题,所以我的怀疑是正确的,因为它是编译/运行时问题。

块是经过编译的,并且因为 if 语句是在运行时执行的,所以一个块无法控制另一个块。

如果有人想要更多信息,请参阅 github 问题线程。