FOSUserBundle のログインフォームを他のレイアウトに含めることについて質問があります。何らかの方法で、2 つのログイン フォームが必要です。
- 拡張なしの 1 つのログイン フォームで、どこにでも含めることができます。たとえば、ここのホームページなどです。
- 私の基本的なレイアウトを拡張する 1 つのログイン フォーム。たとえば、/login を呼び出したときに表示されます。
私は何かを試してみましたが、このエラーがあります:
rSWelcomeBundle:Homepage:index.html.twig の 15 行目で、テンプレート ("GET Security:LoginBisAction" のルートが見つかりません) のレンダリング中に例外がスローされました。
私は 2 つのバンドルを持っています。1 つは WelcomeBundle で、もう 1 つは FOSUserBundle を拡張する UserBundle です。
rs/WelcomeBundle にはホームページがあり、右側のブロックにログイン フォームが含まれています。
{% extends "rsWelcomeBundle::layout.html.twig" %}
{% block title "Page d'accueil" %}
{% block body %}
<div class="span6">
<div class="well">
<h2>Présentation du site</h2>
<p>Rejoignez nous, parce que ceci cela...etc ! </p>
<p><a href="{{ path('fos_user_registration_register') }}" class="btn ">Je m'inscris !</a></p>
</div>
</div>
<div class="span6">
<div class="well">
{% render 'FOSUserBundle:Security:LoginBisAction' %}
</div>
</div>
{% endblock %}
rs/UserBundle のルートで、rsUserBundle.php で FOSUserBundle を拡張します。
<?php
namespace rs\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class rsUserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
rs/UserBundle/Ressources/views/layout.html.twig :
{% extends "rsWelcomeBundle::layout.html.twig" %}
{% block body %}
<div class="span4 offset4">
<div class="well">
{% for key, message in app.session.flashbag.all() %}
<div class="alert alert-{{ key }}">
{{ message|trans({}, 'FOSUserBundle') }}
</div>
{% endfor %}
{% block fos_user_content %}
{% endblock fos_user_content %}
</div>
</div>
{% endblock %}
rs/UserBundle/Ressources/views/Security/login.html.twig :
{% extends "FOSUserBundle::layout.html.twig" %}
{% block fos_user_content %}
{% if error %}
<div>{{ error|trans({}, 'FOSUserBundle') }}</div>
{% endif %}
{% include "UserBundle:Security:login_content.html.twig" %}
{% endblock fos_user_content %}
rs/UserBundle/Ressources/views/Security/login_content.html.twig :
<form action="{{ path("fos_user_security_check") }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<label for="username">{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">{{ 'security.login.password'|trans({}, 'FOSUserBundle') }}</label>
<input type="password" id="password" name="_password" />
<input type="checkbox" id="remember_me" name="_remember_me" value="on" />
<label for="remember_me">{{ 'security.login.remember_me'|trans({}, 'FOSUserBundle') }}</label>
<input type="submit" id="_submit" name="_submit" value="{{ 'security.login.submit'|trans({}, 'FOSUserBundle') }}" />
</form>
そして rs/UserBundle/Controller/ には、 UserController.php というファイルが 1 つしかありません。
<?php
namespace rs\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use FOS\UserBundle\Controller\SecurityController as SecurityController;
use rs\UserBundle\Entity\User;
/**
* Description of UserController
*
*/
class UserController extends SecurityController {
public function LoginBisAction()
{
$csrfToken = $this->container->get('form.csrf_provider')->generateCsrfToken('authenticate');
return $this->container->get('templating')->renderResponse('FOSUserBundle:Security:login_content.html.twig', array(
'last_username' => null,
'error' => null,
'csrf_token' => $csrfToken
));
}
}
どこかにルートを作成する必要がありましたか? ホームページにアクセスしても loginAction が見つからないのはなぜですか? このエラーが発生する理由:
rSWelcomeBundle:Homepage:index.html.twig の 15 行目で、テンプレート ("GET Security:LoginBisAction" のルートが見つかりません) のレンダリング中に例外がスローされました。
どうもありがとう !