我尝试将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模板呈现到我的登录块中,对于这两种形式(默认和错误)?
答案 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" %}
部分的加载模板。