[英]FOSUserBundle registration customize
我想做的事情並不難。 這是我關於symfony的第一個項目,這真的令人困惑。
我正在使用FOSUSerbundle。 我不希望登錄和注冊下面/login
和/registration
所以我做了一個捆綁,這是FOSUSerbundle的孩子......它覆蓋了它的樹枝。
我有:: base.html.twig,其中包含header.html.twig,我有: {% render 'FOSUserBundle:Security:login' %}
,它使我的teplate(覆蓋了FOS)工作gr8。 即使提交后的錯誤也會在:: base模板下呈現“/”路徑。
#Security.yml
form_login:
check_path: /login_check
login_path: /
provider: fos_userbundle
效果很好。
我需要為我的注冊做同樣的事情。
所以在::base
我包含welcome_page.html.twig
,其中我編碼{% render 'FOSUserBundle:Registration:register' %}
,我在我的重寫模板下: WelcomePageBundle:Registration:register.html.twig
this:
{% block fos_user_content %}
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
{% endblock fos_user_content %}[/code]
其中還包括MY rewrited bundle: WelcomePageBundle:Registration:register_content.html.twig
this:
{% for key, message in app.session.getFlashes() %}
<div class="{{ key }}">
{{ message|trans({}, 'FOSUserBundle') }}
</div>
{% endfor %}
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" id="register_form">
{{ form_widget(form) }}
{{ form_rest(form) }}
<input type="submit" class="registration_submit" value="{{ 'welcome_page.registration_box.register_submit'|trans }}"/>
</form>
<div class="v_pripade">
{{ 'welcome_page.registration_box.with_reg_problems'|trans }}
<span style='color: #fff568'>{{ 'welcome_page.registration_box.with_reg_problems_part2'|trans }}</span>
</div>
一切都像魅力一樣...所有文件都包含在內並顯示出來。 但問題來了。
當我去路線/register
(這是FOS捆綁的基本路線)
<route id="fos_user_registration_register" pattern="/register">
<default key="_controller">FOSUserBundle:Registration:register</default>
</route>
...填寫數據並單擊提交...它的工作原理。 顯示錯誤或注冊成功..
但是當我從我的路徑/
提交注冊控制器的地方提交表單(呈現正常)時,我需要這條路徑:/register
這是正常的行為,因為這條路徑:
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" id="register_form">
...這個網站沒有任何擴展,所以它只是在白頁上干凈的形式有錯誤......好的
但是,我怎么可能在這個表單上工作,顯示錯誤並成功登錄MY :: base模板,如登錄? 並且不去/register
路線? 我嘗試替換/register
/
將我帶到我的::base
模板(就像我登錄時一樣)。
#security.yml
form_login:
check_path: /login_check
login_path: /
provider: fos_userbundle
但沒有顯示錯誤或成功......
有人知道解決方案嗎?
您可以在http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html找到有關如何覆蓋默認FOSUserBundle控制器的官方文檔。
為您的主頁創建一個控制器並將請求轉發到FOSUserBundle注冊控制器( http://symfony.com/doc/master/book/controller.html#forwarding )或在完成FOSUserBundle在注冊時執行的操作后向您自己的控制器添加邏輯:
<?php
namespace Acme\UserBundle\Controller;
// Imports @route annotation
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class CustomRegistrationController extends BaseController {
/**
* @Route("/")
*/
public function register() {
$response = $this->forward('FOSUserBundle:Registration:register');
return $response;
}
}
要么
<?php
namespace Acme\UserBundle\Controller;
use Symfony\Component\HttpFoundation\RedirectResponse;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
class RegistrationController extends BaseController
{
public function registerAction()
{
$form = $this->container->get('fos_user.registration.form');
$formHandler = $this->container->get('fos_user.registration.form.handler');
$confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');
$process = $formHandler->process($confirmationEnabled);
if ($process) {
$user = $form->getData();
/*****************************************************
* Add new functionality (e.g. log the registration) *
*****************************************************/
$this->container->get('logger')->info(
sprintf('New user registration: %s', $user)
);
if ($confirmationEnabled) {
$this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
$route = 'fos_user_registration_check_email';
} else {
$this->authenticateUser($user);
$route = 'fos_user_registration_confirmed';
}
$this->setFlash('fos_user_success', 'registration.flash.user_created');
$url = $this->container->get('router')->generate($route);
return new RedirectResponse($url);
}
return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.'.$this->getEngine(), array(
'form' => $form->createView(),
));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.