2013-02-14 359 views
7

我想要做的并不难。这是我第一个关于symfony的项目,它确实令人困惑。FOSUserBundle注册自定义

我正在使用FOSUSerbundle。我不想有一个登录和注册波纹管/login/registration

所以我做了一个捆绑,这是FOSUSerbundle的孩子......它覆盖了它的树枝。

我有:: base.html.twig其中我包括header.html.twig和那里我有:{% render 'FOSUserBundle:Security:login' %}其中呈现我的teplate(overos的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' %}有我在我的rewrited模板:WelcomePageBundle:Registration:register.html.twig这一点:

{% block fos_user_content %} 
{% include "FOSUserBundle:Registration:register_content.html.twig" %} 
{% endblock fos_user_content %}[/code] 

其中还包括从我rewrited包: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> 

一切都像一个魅力......所有的文件都包含在内并显示为greate。但现在问题出现了。

当我去的路线/register

(这是从FOS束基本路线)

<route id="fos_user_registration_register" pattern="/register"> 
    <default key="_controller">FOSUserBundle:Registration:register</default> 
</route> 

...填写数据,然后点击提交...它的工作原理。将显示错误或登记更迭..

但是,当我从我的路线/,其中登记控制器被渲染(渲染OK)提交表单需要我来这条路线:/register这是正常的行为,因为这条路径:

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" id="register_form"> 

...本网站不通过任何扩展,从而有错误的白色网页上它只是干净的形式... OK

但我怎么能可能使工作这种形式显示错误和成功对我::基地模板喜欢登录?并不去/register路线?我试着替换/register/,它将我带到我的::base模板(就像登录我一样)。

#security.yml 
form_login: 
    check_path: /login_check 
    login_path:/
    provider: fos_userbundle 

但显示没有任何错误或成功的...

难道有谁知道解决办法?

+0

您是否试图更改包中包含registration.xml的fos_user_register路由并将其作为(/路由)的前缀而不是/ register?看起来你刚刚创建了另一条指向注册控制器的路由。 – 2013-02-14 22:04:22

+0

你有没有得到这个工作正常?瓦迪姆的建议是为你解决问题的吗? – AMP 2013-05-16 13:38:32

回答

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; 
    } 
} 

<?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(), 
     )); 
    } 
}