2016-06-26 42 views
0

使用Symfony的2.8和2.0 FOSUSerBundle,我想:添加閃光消息,全成登錄後重定向和註銷使用FOSUserBundle

  1. 根據用戶角色登錄和註銷後重定向,
  2. 添加自定義

    :每個操作

我加入我的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); 
    } 

} 

但它是一個很好的方法嗎? 如何添加Flash個人資料?

這種服務在文件系統中的推薦位置是什麼?我已將LogoutSuccessHandler放入~/EventListener目錄內,但我認爲這不是正確的地方...您有什麼意見?

另外,我將在登錄後準備一個類似的服務(重定向和一個flash消息)。

下面的代碼是否正常?

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服務中。 –

相關問題