src/EventSubscriber/TrafficSubscriber.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Main\Traffic;
  4. use App\Repository\Main\TrafficRepository;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. class TrafficSubscriber implements EventSubscriberInterface
  10. {
  11.     private $entityManager;
  12.     public function __construct(EntityManagerInterface $entityManager)
  13.     {
  14.         $this->entityManager $entityManager;
  15.     }
  16.     public function onKernelRequest(RequestEvent $event)
  17.     {
  18.         $path $event->getRequest()->getPathInfo();
  19.         if (!strpos($path'api') && !strpos($path'admin')) {
  20.             $createdAt = new \DateTime();
  21.             $createdAt->setTime($createdAt->format('H'), 0);
  22.             /** @var TrafficRepository $trafficRepository */
  23.             $trafficRepository $this->entityManager->getRepository(Traffic::class);
  24.             /** @var Traffic $t */
  25.             $t $trafficRepository->findOneBy([
  26.                 'createdAt' => $createdAt,
  27.             ]);
  28.             if ($t) {
  29.                 $t->setCount($t->getCount() + 1);
  30.             } else {
  31.                 $t = new Traffic();
  32.                 $t->setCreatedAt($createdAt);
  33.             }
  34.             $this->entityManager->persist($t);
  35.             $this->entityManager->flush();
  36.         }
  37.     }
  38.     public static function getSubscribedEvents()
  39.     {
  40.         return [
  41.             KernelEvents::REQUEST => [
  42.                 [ 'onKernelRequest'20 ],
  43.             ],
  44.         ];
  45.     }
  46. }