<?php
namespace App\EventListener;
use App\Entity\User;
use App\Entity\UserLog;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class UserLogListener
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage)
{
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(RequestEvent $event)
{
if ($this->tokenStorage->getToken() === null) {
return;
}
/** @var User $user */
$user = $this->tokenStorage->getToken()->getUser();
if (!$user instanceof User) {
return;
}
$currentDate = new \Datetime();
$action = $event->getRequest()->attributes->get('_controller');
$method = $event->getRequest()->getMethod();
$userIp = $event->getRequest()->getClientIp();
//dump($this->tokenStorage->getToken()->getRoleNames());
$userLog = new UserLog();
$userLog->setUser($user);
$userLog->setIp($userIp);
$userLog->setAction($action);
$userLog->setMethod($method);
$userLog->setDate($currentDate);
if ($event->getRequest()->request && $method == 'POST') {
$userLog->setData(json_encode($event->getRequest()->request->all()));
} else {
$userLog->setData($event->getRequest()->getPathInfo());
}
$this->entityManager->persist($userLog);
$this->entityManager->flush();
}
}