src/EventListener/RequestLogSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\User;
  4. use App\Service\RequestLoggerService;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Security\Core\Security;
  10. use Symfony\Component\Uid\Ulid;
  11. class RequestLogSubscriber implements EventSubscriberInterface
  12. {
  13.     const REQUEST_ID_KEY 'app_request_id';
  14.     /**
  15.      * @param RequestLoggerService $requestLoggerService
  16.      * @param Security $security
  17.      */
  18.     public function __construct(
  19.         private readonly RequestLoggerService $requestLoggerService,
  20.         private readonly Security $security,
  21.     )
  22.     {
  23.     }
  24.     /**
  25.      * @param RequestEvent $event
  26.      * @return void
  27.      */
  28.     public function onKernelRequest(RequestEvent $event): void
  29.     {
  30.         if (!($this->security->getUser() instanceof User)) {
  31.             return;
  32.         }
  33.         $request $event->getRequest();
  34.         $requestId $this->requestLoggerService->createLog($request);
  35.         $request->attributes->set(static::REQUEST_ID_KEY$requestId);
  36.     }
  37.     /**
  38.      * @param ResponseEvent $event
  39.      * @return void
  40.      */
  41.     public function onKernelResponse(ResponseEvent $event): void
  42.     {
  43.         if (!($this->security->getUser() instanceof User)) {
  44.             return;
  45.         }
  46.         $requestId $event->getRequest()->attributes->get(static::REQUEST_ID_KEY);
  47.         if (!($requestId instanceof Ulid)) {
  48.             return;
  49.         }
  50.         $this->requestLoggerService->updateLogFromHttpResponse($requestId$event->getResponse());
  51.     }
  52.     /**
  53.      * @return string[]
  54.      */
  55.     public static function getSubscribedEvents(): array
  56.     {
  57.         return [
  58.             KernelEvents::REQUEST => 'onKernelRequest',
  59.             KernelEvents::RESPONSE => 'onKernelResponse',
  60.         ];
  61.     }
  62. }