访问内核事件中的当前用户[Symfony 4]

问题描述 投票:0回答:1

我不想保存用户的导航。

我正试图从'kernel.request'事件中保存它,但我无法得到当前用户...

在我的事件监听器中:

KernelEvents::REQUEST => ['logNavigation0']

功能:

public function logNavigation0(GetResponseEvent $event): void
    {
        dump(
            $event->getRequest()->getUser()
        );
    }

我的用户已连接,但getUser()返回我null

如何检索我的用户?还有另一种方法吗?

谢谢 !

我的代码:

class PlayerAction implements EventSubscriberInterface, LogoutHandlerInterface
{
    private $mailer;
    private $requestStack;
    private $entityManager;
    private $tokenStorage;
    private $sender;
    protected $serializer;

    public function __construct(\Swift_Mailer $mailer, RequestStack $requestStack, EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage, $sender)
    {
        $this->mailer = $mailer;
        $this->requestStack = $requestStack;
        $this->entityManager = $entityManager;
        $this->tokenStorage = $tokenStorage;
        $this->sender = $sender;

        $this->serializer = new Serializer([new ObjectNormalizer()], [new JsonEncoder()]);
    }

    public static function getSubscribedEvents(): array
    {
        return [
            // le nom de l'event et le nom de la fonction qui sera déclenché
            Events::PLAYER_REGISTERED => ['logSuccessRegistration'],
            Events::PLAYER_UPDATED => ['logSuccessRegistration'],
            Events::PLAYER_PLAYING => ['logPlay'],
            Events::PLAYER_WINNING => ['logWin'],

            AuthenticationEvents::AUTHENTICATION_SUCCESS => ['logSuccessLogin'],
            AuthenticationEvents::AUTHENTICATION_FAILURE => ['logFailureLogin'],

            KernelEvents::REQUEST => ['logNavigation0'],
            KernelEvents::CONTROLLER_ARGUMENTS => ['logNavigation1'],
        ];
    }
    [...]
    public function logNavigation0(GetResponseEvent $event): void
    {
        dump(
            $event->getRequest()->getUser() //Return null,
        );
    }

public function logNavigation1(FilterControllerArgumentsEvent $event): void
    {
        dump(
            $event,
            $event->getRequest()->getUser(), //Return null,
            ($event->getArguments()),
            $this->tokenStorage->getToken() //Return null,
        );
    }
}
php symfony symfony4
1个回答
0
投票

我收到了回复!

我认为开发环境太快了......

public function logNavigation(GetResponseEvent $event): void
{
    if(!empty($this->tokenStorage->getToken())) // In debug mode, it's null
    {
        /** @var Player $player */
        $player = $this->tokenStorage->getToken()->getUser();

        if($player instanceof Player)
        {
            $playerHystory = new PlayerHistory();
            $playerHystory
                ->setLabel('NAVIGATION')
                ->setDetails([
                    'path' => $event->getRequest()->getPathInfo(),
                    'method' => $event->getRequest()->getMethod()
                ])
                ->setPlayer($player)
                ->setIp($this->requestStack->getCurrentRequest()->getClientIp())
            ;

            $this->entityManager->persist($playerHystory);
            $this->entityManager->flush();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.