2017-09-27 16 views
0

私は登録モーダルウィンドウを持っています。登録が成功した後、同じページでユーザーをリダイレクトしたいと思います。Symfony 3 - FosUserBundle - 登録後に現在のページにリダイレクト

そのためには、Requestオブジェクトを含む新しい関連コントローラを使用してfos_user_registration_confirmedルートを上書きします。

フォームフィールドには、現在のパスを含むパラメータcurrent_pathを追加してから$current_path = $request->attributes->get('current_path');で取得しようとしますが、常にNULLです。

フォームの非表示パラメータで同じことを試してみて$current_path = $request->request->get('current_path');で取得しますが、やはり常にNULLです。

フォームの現在のパスは正しいですが、コントローラでそのパスを取得できないようです。私は

CURRENT_PATHは私register_content.html.twigテンプレートにある現在のパスを取得する方法:

public function registrationConfirmedAction(Request $request) 
{ 
    // POST: doesn't work 
    $current_path = $request->request->get('current_path'); 

    // GET: doesn't work 
    if($current_path == NULL) 
     $current_path = $request->attributes->get('current_path'); 

    if($current_path != NULL) 
     return new RedirectResponse($current_path); 

    return new RedirectResponse($this->generateUrl('pp_home_homepage')); 
} 

編集

{% set current_path = app.request.get('current_path') %} 

を私はコード内の2ヶ所でそれを追加します。

{{ form_start(form, { 
    'method': 'post', 
    'action': path('fos_user_registration_register') ~ '?current_path=' ~ current_path, 
    'attr': { 
     'class': 'fos_user_registration_register', 
     'novalidate': 'novalidate', 
    } 
}) }} 

そしてここに:

<input type="hidden" name="current_path" value="{{ current_path }}"> 

属性が私の基本テンプレートで生成されます。

{% set current_path = path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) %} 

その後、私は私のコントローラに送信:

{{ render(controller(
    'PPUserBundle:Registration:register', 
    {'current_path': current_path} 
)) }} 
+0

現在のURLを追加した場所のコードを表示できます – Chibuzo

+0

@Chibuzo Edited。しかし、 'current_path'値が有効になる前に言ったように、問題はありません。 – Arphel

答えて

0
私は `regiserAction`方法であることを修正しました。フォームが提出されているかどうかテストする前に、現在のパスを取得します: $ current_path = $ request-> request-> get( 'current_path'); 次に、if($ form-> isValid())ブロックの `return $ response;`を次のように変更しました: return new RedirectResponse($ current_path);


編集:リスナー

を使用し、私はそれがEventSubscriberInterfaceを実装するリスナーを作成することをお勧めだということが分かった:

public static function getSubscribedEvents() 
{ 
    return array(
     FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess' 
    ); 
} 

public function onRegistrationSuccess(FormEvent $event) 
{ 
    $current_path = $event->getRequest()->request->get('current_path'); 
    $response = new RedirectResponse($current_path . '?registration_confirmed=true'); 
    $event->setResponse($response); 
} 

はその後app/config/services.ymlを変更することを忘れないでください:

pp_user.registration_success: 
    class: PP\UserBundle\EventListener\RegistrationSuccess 
    autowire: true 
    tags: 
     - { name: kernel.event_subscriber } 
関連する問題