Symfony2如何在模板内集成FOSUserBundle寄存器表单

时间:2014-10-22 13:22:00

标签: symfony twig

我尝试将FOSUserBundle注册表单集成到我的主页(index.html.twig模板。在我的index.html.twig中,我使用render函数在我的登录块中显示表单如下:

{% block container %}
[...]
    {% block login %}
        {% render url('fos_user_registration_register') %}      
    {% endblock login %}
[...]
{% endblock container %}

此时一切正常。但是当我提交表单时出现错误,FOSUserBundle控制器会重定向到我的覆盖寄存器模板,并且只呈现表单,而不是所有带有表单的页面。我试图扩展覆盖的寄存器表单以写入登录块

{% extends "ELSiteBundle:Site:index.html.twig" %}

{% block login %}
<div>
<form ...>
    [my html form]
</form>
</div>
{% endblock login %}

当FOSUserBundle重定向到寄存器模板时,它可以工作,但现在,当调用主页时,我会在登录块中获得重复的html内容(它将整个页面重写为登录块)。

所以我的问题:我如何将register.html.twig模板呈现到我的登录块中,对于这两种形式(默认和错误)?

1 个答案:

答案 0 :(得分:0)

您必须覆盖Resources / views / layout.html.twig模板:

{% extends 'AcmeDemoBundle::layout.html.twig' %}

{% block title %}Acme Demo Application{% endblock %}

{% block content %}
    {% block fos_user_content %}{% endblock %}
{% endblock %}

Overriding Default FOSUserBundle Templates

然后,如果您使用{{ render(controller('FOSUserBundle:Registration:register')) }}

发生错误时,您将使用常用的布局样式进入注册页面。

如果您使用{% render url('fos_user_registration_register') %}

您可以覆盖注册控制器,然后使用isSubmitted()触发表单提交,并依赖于包含或不包含{% extends "ELSiteBundle:Site:index.html.twig" %}部分的加载模板。