我使用"success_handler"(在Symfony security.yml中)和onLogoutSuccess()与FOSUserBundle。但是我想获取User()以在闪存消息中添加他的名字。
服务和 PHP 类:
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'));
}
}
你可以帮我吗?
您可以将@security.context
服务注入到注销处理程序中。从SecurityContext中,您将能够获得当前设置的令牌对象,该对象是TokenInterface的实例。从TokenInterface
实例中,您将能够获取当前用户。见下文。
服务.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'));
}
}
完成/更新 Symfony 3.x 的 @takeit 帖子
将@security.context
替换为@security.token_storage
服务.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();
[...]
}
[...]