Twig,Symfony2:从相同的操作有条件地扩展模板


Twig, Symfony2: Extend template conditionally from same action

在我的base.html.twitch文件中,在一个div部分下的会话控制器editAction上调用render函数,然后渲染edit.html.twid

<div class="container">
    {{ render(controller("DefaultBundle:Session:edit", {'id':session.id})) }}
</div>

edit.html分支:

{{ form_start(form) }}
    {{ form_errors(form) }}
    <div>
        <p>Fill in the form below to change the data:</p>
        <div class="session_form">
            {{ form_label(form.title) }}
            {{ form_widget(form.title) }}
            <div id="form_options">
                {{ form_rest(form) }}
            </div>
            <button class="btnSave">Save</button>
        </div>
    </div>
 {{ form_end(form) }}

这一切都很好,但是,在某些情况下,会显示edit.html.twig文件,根据editAction的路由来编辑表单中的实体,如上所述,它可以直接呈现,而不需要editAction的路径。这意味着没有模板将被继承,它将是一个具有基本形式的普通样式。我可以使用"{%extends'DefaultBundle::base.html.trick'%}"。然而,这意味着有时模板基本上会在一个页面上显示两次,这既不美观,也不实用。有没有一种方法可以根据是否使用渲染器(控制器{})来扩展base.html.twig?

您可以将控制器中的变量或侦听器中的全局分支变量传递到视图,指示是否扩展模板。

然后将一个三元if条件与extends组合。

{% extends standalone ? "minimum.html" : "DefaultBundle::base.html.twig" %}

其中最小值可以是仅包含CCD_ 2块的模板,但该文件必须存在。