FOSUserBundle注册定制

Blo*_*kas 7 php registration symfony fosuserbundle

我想做的事情并不难.这是我关于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
Run Code Online (Sandbox Code Playgroud)

效果很好.

我需要为我的注册做同样的事情.

所以在::base我包含welcome_page.html.twig我编码的地方{% render 'FOSUserBundle:Registration:register' %},我在我的重写模板下面:WelcomePageBundle:Registration:register.html.twig这个:

{% block fos_user_content %}
{% include "FOSUserBundle:Registration:register_content.html.twig" %}
{% endblock fos_user_content %}[/code]
Run Code Online (Sandbox Code Playgroud)

其中还包括我重写的包:WelcomePageBundle:Registration:register_content.html.twig这个:

{% 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>
Run Code Online (Sandbox Code Playgroud)

一切都像魅力一样...所有文件都包含在内并显示出来.但问题来了.

当我去路线 /register

(这是FOS捆绑的基本路线)

<route id="fos_user_registration_register" pattern="/register">
  <default key="_controller">FOSUserBundle:Registration:register</default>
</route>
Run Code Online (Sandbox Code Playgroud)

...填写数据并单击提交...它的工作原理.显示错误或注册成功..

但是当我从我的路线/中提交表格时,注册控制器被渲染(渲染正常),这需要我的路线:/register,这是正常的行为,因为这条路径:

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form)    }} method="POST" id="register_form">
Run Code Online (Sandbox Code Playgroud)

...这个网站没有任何扩展,所以它只是在白页上干净的形式有错误......好的

但是,我怎么可能在这个表单上工作,显示错误并成功登录MY :: base模板,如登录?而且不去/register路线?我试图取代/register/它带我到我的::base模板(如在登录我做的).

#security.yml
form_login:
    check_path: /login_check
    login_path: /
    provider: fos_userbundle
Run Code Online (Sandbox Code Playgroud)

但没有显示错误或成功......

有人知道解决方案吗?

Thi*_*nne 4

您可以在http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html找到有关如何覆盖默认 FOSUserBundle 控制器的官方文档

为您的主页创建一个控制器,并将请求(http://symfony.com/doc/master/book/controller.html#forwarding)转发到 FOSUserBundle 注册控制器,或者在执行 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

<?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(),
        ));
    }
}
Run Code Online (Sandbox Code Playgroud)