我不想保存用户的导航。
我正在尝试从'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,
);
}
}
答案 0 :(得分: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();
}
}
}