src/Hitso/Bundle/ContentBundle/EventListener/ContentHitSubscriber.php line 15

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hitso\Bundle\ContentBundle\EventListener;
  4. use Hitso\Bundle\ContentBundle\Services\ElasticSearch\ElasticSearchVisitManager;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class ContentHitSubscriber implements EventSubscriberInterface
  10. {
  11.     public function onKernelResponse(FilterResponseEvent $event): void
  12.     {
  13.         if (!$event->isMasterRequest()) {
  14.             return;
  15.         }
  16.         $request $event->getRequest();
  17.         if (!$this->isHittable($request)) {
  18.             return;
  19.         }
  20.         ElasticSearchVisitManager::hit($this->getSlug($request));
  21.     }
  22.     private function isHittable(Request $request): bool
  23.     {
  24.         if (!$request->hasSession()) {
  25.             return false;
  26.         }
  27.         $hittable    false;
  28.         $attr        $request->attributes;
  29.         $session     $request->getSession();
  30.         $contentSeen $session->get('contentSeen', []);
  31.         $slug        $this->getSlug($request);
  32.         if ($slug && $attr->has('_hittable') && !isset($contentSeen[$slug])) {
  33.             $contentSeen[$slug] = true;
  34.             $session->set('contentSeen'$contentSeen);
  35.             $hittable true;
  36.         }
  37.         return $hittable;
  38.     }
  39.     private function getSlug(Request $request): ?string
  40.     {
  41.         if (!$slug $request->attributes->get('slug')) {
  42.             return null;
  43.         }
  44.         return substr(trim((string) $slug), 0200);
  45.     }
  46.     public static function getSubscribedEvents()
  47.     {
  48.         return [
  49.             KernelEvents::RESPONSE => [['onKernelResponse'1]],
  50.         ];
  51.     }
  52. }