src/EventSubscriber/TrackingCookieSubscriber.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\StdTrackingService;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. /**
  8.  * Automatically sets the persistent tracking cookie on responses
  9.  * This ensures the tracking ID cookie is sent to the browser independently of sessions
  10.  */
  11. class TrackingCookieSubscriber implements EventSubscriberInterface
  12. {
  13.     private StdTrackingService $trackingService;
  14.     public function __construct(StdTrackingService $trackingService)
  15.     {
  16.         $this->trackingService $trackingService;
  17.     }
  18.     public static function getSubscribedEvents(): array
  19.     {
  20.         return [
  21.             KernelEvents::RESPONSE => ['onKernelResponse'0],
  22.         ];
  23.     }
  24.     public function onKernelResponse(ResponseEvent $event): void
  25.     {
  26.         if (!$event->isMainRequest()) {
  27.             return;
  28.         }
  29.         // Check if there's a pending tracking cookie to set
  30.         $cookie $this->trackingService->getPendingTrackingCookie();
  31.         
  32.         if ($cookie) {
  33.             $response $event->getResponse();
  34.             $response->headers->setCookie($cookie);
  35.             
  36.             // Clear the pending cookie after setting it
  37.             $this->trackingService->clearPendingTrackingCookie();
  38.         }
  39.     }
  40. }