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

Php Twig,Symfony2:从同一操作有条件地扩展模板,php,symfony,twig,Php,Symfony,Twig,在我的base.html.twig文件中的一个div部分下,在会话控制器和编辑操作上调用渲染函数,然后依次渲染编辑.html.twig: <div class="container"> {{ render(controller("DefaultBundle:Session:edit", {'id':session.id})) }} </div> {{ form_start(form) }} {{ form_errors(form) }} <

在我的base.html.twig文件中的一个div部分下,在会话控制器和编辑操作上调用渲染函数,然后依次渲染编辑.html.twig

<div class="container">
    {{ render(controller("DefaultBundle:Session:edit", {'id':session.id})) }}
</div>
{{ 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) }}

{{render(controller(“DefaultBundle:Session:edit”,{'id':Session.id}))}
编辑.html.twig

<div class="container">
    {{ render(controller("DefaultBundle:Session:edit", {'id':session.id})) }}
</div>
{{ 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) }}
{{form_start(form)}
{{form_errors(form)}}
填写下表以更改数据:

{{form_标签(form.title)} {{form_小部件(form.title)} {{form_rest(form)} 拯救 {{form_end(form)}}

这一切都很好,但是,在某些情况下,将显示edit.html.twig文件,以根据editAction的路径编辑表单中的实体,如上所述,可以直接呈现实体,而无需editAction的路径。这意味着不会继承任何模板,它将是带有基本表单的简单样式。我可以使用“{%extends'DefaultBundle::base.html.twig”%}”但是,这意味着有时模板实际上会在页面上显示两次,这既不美观,也不实用。是否有扩展base.html.twig的方法,这取决于是否使用了呈现(控制器{}?

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

然后将三元if条件与扩展相结合

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

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

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

然后将三元if条件与扩展相结合

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

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

这行不通。每次调用editAction时都会传递该变量,因此会导致没有模板呈现,或者两者都没有。如果
$event->getRequestType(),则只需检查
内核.request
事件
等于
HttpKernelInterface::MASTER_REQUEST
HttpKernelInterface::SUB_REQUEST
然后将变量作为true或false传递。。。但是您的问题是,是否有一种方法可以根据是否使用呈现(控制器{})来扩展base.html.twig?我的答案是:)
{%if…%}
这不会影响
{%extends%}
。感谢您的回答,但是使用kernel.request似乎总是输出true?您能将当前实现添加到问题中吗?这不起作用。每次调用editAction时都会传递该变量,因此会导致没有模板呈现,或者两者都没有。如果
$event->getRequestType(),则只需检查
内核.request
事件
等于
HttpKernelInterface::MASTER_REQUEST
HttpKernelInterface::SUB_REQUEST
然后将变量作为true或false传递。。。但是您的问题是,是否有一种方法可以根据是否使用呈现(控制器{})来扩展base.html.twig?我的答案是:)
{%if…%}
这不会影响
{%extends%}
。感谢您的回答,但是使用kernel.request似乎总是输出true?您可以将当前实现添加到问题中吗?