1

在我的base.html.twig文件的一个 div 部分下,渲染函数在Session ControllereditAction上被调用,这反过来渲染了 edit.html.twig

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

edit.html.twig:_

{{ 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 的路由编辑表单中的实体,如上所述,它可以直接呈现而无需路由用于编辑操作。这意味着不会继承任何模板,它将是具有基本形式的普通样式。我可以使用"{% extends 'DefaultBundle::base.html.twig' %}"但是,这意味着有时模板实际上会在页面上显示两次,这既不美观也不实用。有没有办法根据是否使用 render(controller{}) 来扩展 base.html.twig?

4

1 回答 1

1

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

然后将三元 if 条件与extends.

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

...其中 minimum 可以是仅包含content块的模板,但文件必须存在。

于 2013-08-01T13:13:51.900 回答