2016-06-26 44 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服务中。 –

相关问题