FOSUserBundle: как лучше всего интегрировать регистрационную форму в одном шаблоне?

Я использую FOSUserBundle в своем приложении Symfony, который действительно замечательный. У них есть форма регистрации и регистрации в отдельном шаблоне. Я хочу, чтобы оба в одном шаблоне отображали их рядом друг с другом.

Поэтому я создал app/Resources/FOSUserBundle/Security/login.html.twig и app/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:login и Registration:register, шаблоны будут визуализироваться по-разному:

$this->renderLogin(...

и

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

Итак, у меня есть два вопроса:

  • Что означает сообщение об ошибке и как я могу его решить?
  • Возможно, этот подход не идеален, есть ли лучшее решение для этого?

Ответ 1

Вы могли бы использовать (как сказал @Sidali Hallak)

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

Но используйте собственные версии шаблонов FOSUserBundle:Registration:register.html.twig и FOSUserBundle:Security:login.html.twig, которые не расширяют FOSUserBundle::layout.html.twig

Ответ 2

Чтобы соответствовать новым версиям Symfony, вам следует избегать использования тега {% render %} и вместо него использовать {{ render(controller('MyBundle:ControllerClass:action')) }}:

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

Ответ 3

использовать:

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

Ответ 4

Максимальный уровень вложенности происходит от xdebug и может быть разрешен параметр...

xdebug.max_nesting_level = 200

... в вашем php.ini.