FOSUserBundle:如何在一个模板中最好地集成登录和注册表单?

时间:2013-07-19 14:35:58

标签: templates symfony login twig fosuserbundle

我在Symfony应用程序中使用FOSUserBundle非常棒。他们在单独的模板中有登录和注册表单。我希望在一个模板中将它们彼此相邻显示。

因此,我创建了app/Resources/FOSUserBundle/Security/login.html.twigapp/Resources/FOSUserBundle/Registration/register.html.twig来覆盖这两个模板。在login.html.twig中,我调用寄存器控制器来呈现其模板。

应用程序/资源/ FOSUserBundle /安全性/ login.html.twig:

{% extends "FOSUserBundle::layout.html.twig" %}

{% trans_default_domain 'FOSUserBundle' %}

{% block fos_user_content %}
    {% if error %}
        <div>{{ error|trans }}</div>
    {% endif %}

    <form action="{{ path("fos_user_security_check") }}" method="post">
        <input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />

        <input type="text" id="username" name="_username" value="{{ last_username }}" placeholder="{{ 'security.login.username'|trans }}" required="required" />

        <input type="password" id="password" name="_password" placeholder="{{ 'security.login.password'|trans }}" required="required" />

        <input type="checkbox" id="remember_me" name="_remember_me" value="on" />
        <label for="remember_me">{{ 'security.login.remember_me'|trans }}</label>

        <input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans }}" />
    </form>

    {{ render(controller('FOSUserBundle:Registration:register')) }}
{% endblock fos_user_content %}

应用程序/资源/ FOSUserBundle /注册/ register.html.twig:

{% include "FOSUserBundle:Registration:register_content.html.twig" %}

但后来我收到以下错误:

FatalErrorException: Error: Maximum function nesting level of '100' reached, aborting! in /private/var/www/symfony/My_UserBundle/vendor/twig/twig/lib/Twig/Node/Expression/Array.php line 31

我不知道为什么会收到此错误消息。如果我查看Security:loginRegistration:register控制器,模板会以不同的方式呈现:

$this->renderLogin(...

$this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html....

基本上我有两个问题:

  • 错误消息的含义是什么?如何解决?
  • 也许这种方法并不理想,有没有更好的解决方案?

4 个答案:

答案 0 :(得分:11)

你可以使用(如@Sidali Hallak所说)

{% render url('fos_user_registration_register') %}
{% render url('fos_user_security_login') %}

但请使用您自己的FOSUserBundle:Registration:register.html.twigFOSUserBundle:Security:login.html.twig模板,这些模板不会延伸FOSUserBundle::layout.html.twig

答案 1 :(得分:7)

要符合较新的Symfony版本,您应该避免使用{% render %}代码并改为使用{{ render(controller('MyBundle:ControllerClass:action')) }}

    {{ render(controller('FOSUserBundle:Security:login')) }}
    {{ render(controller('FOSUserBundle:Registration:register')) }}

答案 2 :(得分:3)

使用:

{% render url('fos_user_security_login') %}
{% render url('fos_user_Registration_register') %}

答案 3 :(得分:0)

最大嵌套级别来自 xdebug ,可以解析设置......

xdebug.max_nesting_level = 200

...在你的php.ini中。