<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Security\Core\Security;
use Psr\Log\LoggerInterface;
use Symfony\Component\Serializer\SerializerInterface;
class RequestSubscriber implements EventSubscriberInterface {
private $requestStack;
private $logger;
private $security;
private $serializer;
public function __construct(RequestStack $requestStack, LoggerInterface $logger, Security $security, SerializerInterface $serializer) {
$this->requestStack = $requestStack;
$this->logger = $logger;
$this->security = $security;
$this->serializer = $serializer;
}
/**
*
* @return type
*/
public static function getSubscribedEvents(): array {
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
public function onKernelRequest(RequestEvent $event) {
$request = $event->getRequest();
$this->logger->info(sprintf('Request GET parameters: %s', json_encode($request->query->all())));
$this->logger->info(sprintf('Request POST parameters: %s', json_encode($request->request->all())));
$this->logger->info(sprintf('Request ATTRIBUTES parameters: %s', json_encode($request->attributes->all())));
$this->logger->info(sprintf('Request COOKIES parameters: %s', json_encode($request->cookies->all())));
$this->logger->info(sprintf('Request HEADERS parameters: %s', json_encode($request->headers->all())));
// Retrieve the logged-in user (if any)
$user = $this->security->getUser();
// Access the user details
if ($user !== null) {
$serializedUser = $this->serializer->serialize($user, 'json', ['groups' => 'user']);
$this->logger->info('User logged in: ' . $serializedUser);
}
$this->requestStack->push($request);
}
}