<?php
namespace App\EventSubscriber;
use App\Service\StdTrackingService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
/**
* Automatically sets the persistent tracking cookie on responses
* This ensures the tracking ID cookie is sent to the browser independently of sessions
*/
class TrackingCookieSubscriber implements EventSubscriberInterface
{
private StdTrackingService $trackingService;
public function __construct(StdTrackingService $trackingService)
{
$this->trackingService = $trackingService;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::RESPONSE => ['onKernelResponse', 0],
];
}
public function onKernelResponse(ResponseEvent $event): void
{
if (!$event->isMainRequest()) {
return;
}
// Check if there's a pending tracking cookie to set
$cookie = $this->trackingService->getPendingTrackingCookie();
if ($cookie) {
$response = $event->getResponse();
$response->headers->setCookie($cookie);
// Clear the pending cookie after setting it
$this->trackingService->clearPendingTrackingCookie();
}
}
}