2013-02-14 5 views
7

私がやっていることは何も難しいことではありません。これはsymfonyに関する私の最初のプロジェクトであり、本当に混乱しています。FOSUserBundle registration customize

私はFOSUSerbundleを使用しています。私はログインと登録をしたくない/login/registration

私はFOSUSerbundleの子であるバンドルを作りました...そして、その小枝を上書きします。

私は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に私は{% render 'FOSUserBundle:Registration:register' %}をコーディングし、そこに私は私の書き換え中のテンプレートの下に持ってwelcome_page.html.twigを含める:WelcomePageBundle:Registration:register.html.twigこの:また私の書き換え中バンドルから含ま

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

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> 

すべてが魅力的なように機能します...すべてのファイルが含まれ、表示されます。しかし、今問題が起こっています。

私はルート/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

しかし、どのようにすることができます私は可能にする作業このフォームMYのエラーと成功を表示して::ログインのような基本テンプレート?そして/registerに行くのはどうですか?私は/の代わりに/registerを置き換えました。私の::baseテンプレートに私を連れて来ました。

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

しかし、エラーや成功のどれも表示されない...

は、誰もが解決策を知っていますか?

+0

バンドルからregistration.xmlを含むfos_user_registerルートを変更して、/ pathの代わりに/を付けてみましたか?あなたはちょうどレジスタコントローラに指示する別のルートを作成したように見えます。 –

+0

これは正しく動作しましたか?あなたのために問題を解決したVadimの提案ですか? – AMP

答えて

4

あなたはFOSUserBundle登録コントローラに自分のホームページや前方の要求(http://symfony.com/doc/master/book/controller.html#forwarding)用のコントローラを作成するか、または実行した後、独自のコントローラにロジックを追加 http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html

でデフォルト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(), 
     )); 
    } 
} 
:どんなFOSUserBundleは、登録時に行います