web-dev-qa-db-ja.com

FOSUserBundle:ログインフォームと登録フォームを1つのテンプレートに最適に統合する方法は?

私はSymfonyアプリケーションでFOSUserBundleを使用しています。これは本当に素晴らしいです。ログインフォームと登録フォームは別のテンプレートにあります。 1つのテンプレートで両方を並べて表示したいと思います。

したがって、両方のテンプレートをオーバーライドするためにapp/Resources/FOSUserBundle/Security/login.html.twigapp/Resources/FOSUserBundle/Registration/register.html.twigを作成しました。 login.html.twigで、レジスタコントローラーを呼び出してテンプレートをレンダリングします。

app/Resources/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 %}

app/Resources/FOSUserBundle/Registration/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....

つまり、基本的に2つの質問があります。

  • エラーメッセージは何を意味し、どうすれば解決できますか?
  • このアプローチは理想的ではないかもしれませんが、これに対するより良い解決策はありますか?
10
tester

あなたは使うことができます(@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テンプレートを使用してください。

11
qooplmao

新しいSymfonyバージョンに準拠するには、_{% render %}_タグの使用を避け、代わりに{{ render(controller('MyBundle:ControllerClass:action')) }}を使用する必要があります。

_    {{ render(controller('FOSUserBundle:Security:login')) }}
    {{ render(controller('FOSUserBundle:Registration:register')) }}
_
7
Alain Tiemblo

使用する :

{% render url('fos_user_security_login') %}
{% render url('fos_user_Registration_register') %}
3
Sidali Hallak

最大ネストレベルはxdebugから取得され、設定を解決できます...

xdebug.max_nesting_level = 200

... php.iniで。

0