gpt4 book ai didi

twig - 有条件地在 Twig 2 中定义一个 block

转载 作者:行者123 更新时间:2023-12-01 06:03:49 25 4
gpt4 key购买 nike

所以这是用例:

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

  • Twig 2.2
    symfony 3.2

    在基本模板中,我只渲染一个 block ,如果它定义(不是'非空')
    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 %}

    index.html.twig
    对于上述工作,根本无法定义 block (这是完全设计的)。无论如何,下面都会渲染 block ,我不知道为什么。
    {% if not is_granted('IS_FULLY_AUTHENTICATED') %}
    {% block left_sidebar %}
    {% include ':blocks:block__login.html.twig' %}
    {% endblock %}
    {% endif %}
    我想知道这是否因为与基本模板代码 相同的原因而不起作用工作。即 block 在运行前编译,条件语句在运行时执行。
    谁能确认我是对的?或者如果我错了请纠正我?
    编辑
    我尝试将条件的结果强制为真和假,并且在任何一种情况下都会呈现 block 。

    最佳答案

    Twig 将你的模板编译成 php 类,你可以在 symfony cache 中看到这些类。目录和 block 是这些类中的方法。这意味着 block 总是在编译时定义,像你这样的条件只确定它们是否被“执行”。

    对于您的用例,我建议您调用 is_granted在基本模板中。那么你就不需要包含任何 if index.html.twig 中的元素因为如果从未使用过,定义侧边栏 block 将不起作用。

    定义未使用的 block 并没有真正影响性能,因为 twig block 的解析只发生在编译时。例如,在 symfony 自己的表单组件中定义 block 是否被使用。

    关于twig - 有条件地在 Twig 2 中定义一个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186007/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com