templates - FOSUserBundle: ¿cómo integrar mejor el inicio de sesión y el registro en una plantilla?
symfony login (4)
El nivel máximo de anidación proviene de xdebug y se puede resolver configurando ...
xdebug.max_nesting_level = 200
... en tu php.ini.
Estoy usando FOSUserBundle en mi aplicación Symfony, que es realmente genial. Tienen los formularios de inicio de sesión y registro en una plantilla separada. Quiero que ambos en una plantilla los muestren uno al lado del otro.
Por lo tanto, he creado la app/Resources/FOSUserBundle/Security/login.html.twig
y la app/Resources/FOSUserBundle/Registration/register.html.twig
para anular ambas plantillas. En login.html.twig
llamo al controlador de registro para representar su plantilla.
aplicación / Recursos / FOSUserBundle / Security / 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 %}
aplicación / Recursos / FOSUserBundle / Registration / register.html.twig:
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
Pero luego aparece el siguiente error:
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
No sé por qué recibo este mensaje de error. Si miro la Security:login
y Registration:register
controlador de Registration:register
, las plantillas se procesan de diferentes maneras:
$this->renderLogin(...
y
$this->container->get(''templating'')->renderResponse(''FOSUserBundle:Registration:register.html....
Entonces, básicamente, tengo dos preguntas:
- ¿Qué significa el mensaje de error y cómo puedo resolverlo?
- Tal vez este enfoque no es ideal, ¿hay una mejor solución para esto?
Para cumplir con las versiones más nuevas de Symfony, debe evitar el uso de la etiqueta {% render %}
y usar {{ render(controller(''MyBundle:ControllerClass:action'')) }}
lugar:
{{ render(controller(''FOSUserBundle:Security:login'')) }}
{{ render(controller(''FOSUserBundle:Registration:register'')) }}
Podrías usar (como dijo @Sidali Hallak)
{% render url(''fos_user_registration_register'') %}
{% render url(''fos_user_security_login'') %}
Pero use sus propias versiones de FOSUserBundle:Registration:register.html.twig
y FOSUserBundle:Security:login.html.twig
plantillas que no extienden FOSUserBundle::layout.html.twig
utilizar :
{% render url(''fos_user_security_login'') %}
{% render url(''fos_user_Registration_register'') %}