Ich benutze den FOSUserBundle in meiner Symfony-Anwendung, die wirklich großartig ist. Sie haben Anmelde- und Registrierungsformulare in einer separaten Vorlage. Ich möchte beide in einer Vorlage nebeneinander anzeigen.FOSUserBundle: Wie integriere ich am besten Login und Registrierungsformular in einer Vorlage?
Daher habe ich app/Resources/FOSUserBundle/Security/login.html.twig
und app/Resources/FOSUserBundle/Registration/register.html.twig
erstellt, um beide Vorlagen zu überschreiben. In login.html.twig
rufe ich den Register-Controller auf, um seine Vorlage zu rendern.
app/Resources/FOSUserBundle/Sicherheit/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/Registration/register.html.twig:
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
Aber dann bekomme ich der folgende Fehler:
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
Ich weiß nicht, warum ich diese Fehlermeldung erhalte. Wenn ich die Security:login
und Registration:register
Controller schauen, bekommen die Vorlagen auf verschiedene Weise gemacht:
$this->renderLogin(...
und
$this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html....
Also im Grunde habe ich zwei Fragen:
- Was den Fehler macht Mitteilungsmitteilung und wie kann ich es lösen?
- Vielleicht ist dieser Ansatz nicht ideal, gibt es dafür eine bessere Lösung?
klingt ziemlich gut. Aber es gibt noch ein Hauptproblem: Der Registrierungs-Controller routet immer noch zu seinen eigenen konfigurierten "/ Register" -Routen, was nicht die Route ist, die ich möchte. Wie kann ich das beeinflussen? Wie kann ich ihm sagen, dass ich zu meiner Seite zurückkehren möchte, wo Login und Registrierung nebeneinander existieren? Ich denke, es ist nicht die Lösung, das Routing des FOSUserBundle dafür zu ändern. – tester
übrigens: '{% render url ('fos_user_security_login')%}' funktioniert nicht. Kannst du mir sagen warum? – tester
Haben Sie alle Routen in Ihre eigene Routing-Datei importiert, sollte sich die Login-Route dort befinden wie die Basis des Register-Ordners? Um nicht mit den Controllern herumzualbern, könntest du die '{% render url ('fos_user_security_login')%}' in 'FOSUserBundle: Registrierung: register.html.twig' haben, obwohl dies immer noch bedeuten würde, dass das Login-Formular dies tut Bei einem fehlgeschlagenen Versuch zur ursprünglichen Login-Route zurückkehren. Um es richtig zu machen, denke ich, dass Sie die Registrierungs- und Sicherheitscontroller anpassen müssen. – qooplmao