<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Security;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\UserLog;
class RequestLoggerSubscriber implements EventSubscriberInterface
{
private Security $security;
private EntityManagerInterface $em;
public function __construct(
Security $security,
EntityManagerInterface $em
) {
$this->security = $security;
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['onKernelRequest', 0]
];
}
public function onKernelRequest(RequestEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
$request = $event->getRequest();
$user = $this->security->getUser();
if (!$user) {
return; // ou journaliser les accès anonymes
}
// dd($request);
$path = $request->getPathInfo();
if (strpos($path, "sync_index") !== false) {
// echo "Mot trouvé !";
return;
} else {
// echo "Mot non trouvé !";
}
$userlog = new UserLog();
$userlog->setUser($user->getUserIdentifier());
$userlog->setPath($path);
$userlog->setMethod($request->getMethod());
$userlog->setQuery(json_encode($request->query->all()));
$userlog->setIp($request->getClientIp());
$userlog->setCreatedAt(new \DateTime());
$userlog->setUserAgent($_SERVER['HTTP_USER_AGENT']);
$this->em->persist($userlog);
$this->em->flush();
}
}