Symfony 2.5/FOSUserBundle在EventListener中获取用户ID

Ble*_*rre 0 symfony fosuserbundle

我试图在Symfony 2.4中的事件监听器中获取用户ID,但据我所知,EventListener未被控制器调用,因此我无法使用

$这 - >的getUser();

获得身份证的最佳方式是什么?

我想过在调用事件的services.yml中给它.

感谢anyhelp或任何有用的文档.

问候,

Fil*_*ilo 6

在控制器中,您应该能够将symfony 2.1简单地使用

 $user = $this->getUser();
 $userId = $user->getId();
Run Code Online (Sandbox Code Playgroud)

或者,您可以从安全上下文中获取当前登录的用户对象

$user = $this->container->get('security.context')->getToken()->getUser();
$userId = $user->getId();
Run Code Online (Sandbox Code Playgroud)

或者使用FOSUserBundle服务(显然它是内置方法getUser()的替代品,如链接页面中的注释所示)

$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')->getToken()->getUser());
$userId = $user->getId();
Run Code Online (Sandbox Code Playgroud)

更新

如果您在事件侦听器中,则需要通过依赖注入将容器注入侦听器类以便执行它.看看这个答案:https://stackoverflow.com/a/17022330/3625883


第二次更新

之前的链接正是你所要求的,但我只想注意一件事:一般来说注入整个服务容器不是一个好习惯,你应该只注入security.context.有关更多信息,请访问:https://stackoverflow.com/a/15922525/3625883