2016-03-02 48 views
1

我用 “success_handler”(在Symfony的security.yml)和onLogoutSuccess()与FOSUserBundle。但我想getUser()在flash消息中添加他的名字。的getUser()的注销与FOSUserBundle

服务和PHP CLASSE:

services: 
    utilisateur_deconnexion: 
     class: UtilisateurBundle\Handler\Deconnexion 
     arguments: [@router] 

class Deconnexion implements LogoutSuccessHandlerInterface 
{ 

    private $router; 

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

    public function onLogoutSuccess(Request $request) 
    { 
     $request->getSession()->getFlashBag()->add('success', 'Vous êtes à présent déconnecté.'); 
     return new RedirectResponse($this->router->generate('dometech_index_index')); 
    } 

} 

你能帮助我吗?

+0

您可以检查:http://stackoverflow.com/questions/12743213/symfony2-logout。您可以在您的构造函数中添加“SecurityContext $ security”,并使用它来获取用户。在参数中添加security.yml [@ security.context] –

回答

2

您可以将@security.context服务注入您的注销处理程序。 从SecurityContext您将能够获得当前设置的令牌对象,它是TokenInterface的实例。从TokenInterface的实例中,您将能够获得当前用户。见下文。

services.yml

services: 
    utilisateur_deconnexion: 
     class: UtilisateurBundle\Handler\Deconnexion 
     arguments: ["@router", "@security.context"] 

注销成功处理程序:

use Symfony\Component\Security\Core\SecurityContextInterface; 
use Symfony\Component\Routing\RouterInterface; 

class Deconnexion implements LogoutSuccessHandlerInterface 
{ 

    private $router; 

    private $securityContext; 

    public function __construct(RouterInterface $router, SecurityContextInterface $securityContext) 
    { 
     $this->router = $router; 
     $this->securityContext = $securityContext; 
    } 

    public function onLogoutSuccess(Request $request) 
    { 
     // let's assume your user object has getUsername method 
     $username = $this->securityContext->getToken()->getUser()->getUsername(); 

     $request->getSession()->getFlashBag()->add(
      'success', 
      sprintf('%s - Vous êtes à présent déconnecté.', $username) 
     ); 

     return new RedirectResponse($this->router->generate('dometech_index_index')); 
    } 
} 
0

要完成/更新的@takeit为symfony1.2 3.X

后更换@security.context@security.token_storage

services.yml

services: 
    utilisateur_deconnexion: 
     class: UtilisateurBundle\Handler\Deconnexion 
     arguments: ["@router", "@security.token_storage"] 

注销成功处理程序:

[...] 
    public function onLogoutSuccess(Request $request) 
    { 
     // let's assume your user object has getUsername method 
     $username = $this->tokenStorage->getToken()->getUsername(); 

     [...] 
    } 
[...]