Używam FOSUserBundle w mojej aplikacji Symfony, która jest naprawdę świetna. Mają formularze logowania i rejestracji w osobnym szablonie. Chcę, aby oba w jednym szablonie wyświetlały je obok siebie.FOSUserBundle: Jak najlepiej zintegrować formularz logowania i rejestracji w jednym szablonie?
Dlatego stworzyłem app/Resources/FOSUserBundle/Security/login.html.twig
i app/Resources/FOSUserBundle/Registration/register.html.twig
, aby nadpisać oba szablony. W login.html.twig
wzywam kontroler rejestru, aby wyrenderować jego szablon.
app/Resources/FOSUserBundle/Bezpieczeństwo/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 %}
app/Resources/FOSUserBundle/Rejestracja/register.html.twig:
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
Ale potem dostać następujący błąd:
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
Nie wiem, dlaczego pojawia się ten komunikat o błędzie. Jeśli patrzę na kontrolerze Security:login
i Registration:register
, szablony dostać świadczonych na różne sposoby:
$this->renderLogin(...
i
$this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html....
Więc w zasadzie mam dwa pytania:
- Co robi błąd wiadomość oznacza i jak mogę ją rozwiązać?
- Może to podejście nie jest idealne, czy istnieje lepsze rozwiązanie?
brzmi całkiem nieźle. Ale nadal pozostaje główny problem: kontroler rejestracji wciąż kieruje się do własnej skonfigurowanej trasy "/ register", która nie jest pożądaną trasą. Jak mogę wpływać na to? Jak mogę mu powiedzieć, że chcę powrócić do mojej strony, na której logują się i rejestrują obok siebie? Myślę, że nie jest to rozwiązanie do zmiany routingu FOSUserBundle. – tester
przy okazji: '{% renderowania url ('fos_user_security_login')%}' nie działa. czy możesz powiedzieć mi dlaczego? – tester
Czy zaimportowałeś wszystkie trasy do własnego pliku routingu, czy trasa logowania powinna znajdować się w tym katalogu, tak jak powinna być baza? Aby nie musieć mieszać się z kontrolerami, możesz mieć '{% renderuj adres URL ('fos_user_security_login')%}' w 'FOSUserBundle: Registration: register.html.twig' chociaż to nadal oznacza, że formularz logowania będzie trasa do oryginalnej trasy logowania po nieudanej próbie. Aby zrobić to poprawnie, myślę, że potrzebujesz dostosować kontrolery rejestracji i bezpieczeństwa. – qooplmao