2016-06-26 10 views
0

を使用して、ログアウト、私がしようとしている:は、フラッシュメッセージを追加し、成功したログイン後にリダイレクトするとsymfony 2.8とFOSUSerBundle 2.0を使用してFOSUserBundle

  1. 、ユーザーの役割に応じて、ログインおよびログアウト後にリダイレクトするカスタムを追加します

    :各操作

私は私のsecurity.ymlで対象とdefault_target_pathパラメータを追加しましたが、それが唯一の事前に定義されたルートにリダイレクトするためのフラッシュメッセージ

あなたが見ることができるように、私はすでにlogout_success_handlerサービス作成しました:

class LogoutSuccessHandler implements LogoutSuccessHandlerInterface 
{ 

    protected $router; 

    public function __construct(Router $router) 
    { 
     $this->router = $router; 
    } 

    public function onLogoutSuccess(Request $request) 
    { 
     $route = $this->router->generate('my_route'); 
     return new RedirectResponse($route); 
    } 

} 

をしかし、それは良い方法ですか? フラッシュメッセージを追加するには?

この種のサービスのファイルシステムで推奨される場所は何ですか?私は~/EventListenerディレクトリにLogoutSuccessHandlerを入れましたが、それは適切な場所ではないと思います...あなたはどう思いますか?

また、ログイン後に同様のサービス(リダイレクトとフラッシュメッセージ)を用意します。

次のコードは問題ありませんか?

use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; 
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\RedirectResponse; 
use Symfony\Bundle\FrameworkBundle\Routing\Router; 
use Symfony\Component\HttpFoundation\Session\Session; 

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface 
{ 

    protected $router; 
    protected $session; 

    public function __construct(Router $router, Session $session) 
    { 
     $this->router = $router; 
     $this->session = $session; 
    } 

    public function onAuthenticationSuccess(Request $request, TokenInterface $token_name(token)) 
    { 
     $this->session->getFlashBag()->add('success', 'user.welcome'); 

     $default_route = $this->router->generate('fos_user_profile_show'); 
     return new RedirectResponse($default_route); 
    } 

} 

答えて

0

このアプローチが適切です。次の方法でflash messageを追加できます。

class LogoutSuccessHandler implements LogoutSuccessHandlerInterface 
{ 
    protected $router; 
    protected $session; 

    public function __construct(Router $router, Session $session) 
    { 
     $this->router = $router; 
     $this->session = $session; 
    } 

    public function onLogoutSuccess(Request $request) 
    { 
     $this->session->getFlashBag()->add('success', 'user.logout'); 

     $route = $this->router->generate('my_route'); 
     return new RedirectResponse($route); 
    } 
} 
+0

私は怖い: '$要求 - >のgetSession() - > getFlashBag() - >( 'タイプ'、 'メッセージ')を追加;' は、リダイレクト後に任意のメッセージを表示しません。 コントローラ内の他の操作については、私は使っています: '$ this-> addFlash( 'success'、 'user.logout');' これはちょっとしたポップアップメッセージを正しく示しています。 – Torpedr

+0

処理中にセッションが破棄されている可能性があります。これをsecurity.ymlに追加した可能性があります。 'invalidate_session:false' 私はどちらも助けませんでした。 – Torpedr

+0

私は自分の答えを更新しました。 Sessionオブジェクトをlogout_success_handlerサービスに注入しようとしてください。 –

関連する問題