src/EventListener/UtmListener.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Service\UtmManager;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  6. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  7. use Symfony\Component\HttpKernel\Event\KernelEvent;
  8. use Symfony\Component\HttpKernel\Event\ResponseEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. class UtmListener implements EventSubscriberInterface
  11. {
  12.     private $utmManager;
  13.     public function __construct(UtmManager $utmManager)
  14.     {
  15.         $this->utmManager $utmManager;
  16.     }
  17.     public function onKernelController(ControllerEvent $event)
  18.     {
  19.         $request $event->getRequest();
  20.         if (!$event->isMasterRequest()){
  21.             return;
  22.         }
  23.         $this->utmManager->loadUtm($request);
  24.         if ($this->mustUpdateUtm($event$request)) {
  25.             $this->utmManager->updateUtm($request);
  26.         }
  27.     }
  28.     private function mustUpdateUtm(KernelEvent $event$request){
  29.         if (!$event->isMasterRequest() ||
  30.             $request->query->count()==||
  31.             $event->getRequest()->isXmlHttpRequest() ||
  32.             $request->getPathInfo() == '/js/routing' ||
  33.             strpos($request->getPathInfo(), '/admin')===||
  34.             strpos($request->getPathInfo(), '_profiler')===0
  35.         ) {
  36.             return false;
  37.         }
  38.         return true;
  39.     }
  40.     public function onKernelResponse(ResponseEvent $event)
  41.     {
  42.         $request $event->getRequest();
  43.         $response $event->getResponse();
  44.         if ($this->mustUpdateUtm($event$request)) {
  45.             $this->utmManager->storeUtm($request$response);
  46.         }
  47.     }
  48.     public static function getSubscribedEvents()
  49.     {
  50.         return [
  51.             KernelEvents::RESPONSE => 'onKernelResponse',
  52.             KernelEvents::CONTROLLER => 'onKernelController',
  53.         ];
  54.     }
  55. }