src/Service/User/LastActiveSubscriber.php line 56

  1. <?php
  2. /**
  3.  * Created by PhpStorm.
  4.  * User: Михаил
  5.  * Date: 28.01.2019
  6.  * Time: 17:31
  7.  */
  8. namespace App\Service\User;
  9. use App\Entity\User\User;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. use Symfony\Component\HttpKernel\Event\TerminateEvent;
  14. use Symfony\Component\HttpKernel\KernelEvents;
  15. use Symfony\Component\Security\Core\Security;
  16. class LastActiveSubscriber implements EventSubscriberInterface
  17. {
  18.     public function __construct(
  19.         private Security $security,
  20.         private EntityManagerInterface $em,
  21.         private LoggerInterface $logger
  22.     )
  23.     {
  24.     }
  25.     /**
  26.      * Returns an array of event names this subscriber wants to listen to.
  27.      *
  28.      * The array keys are event names and the value can be:
  29.      *
  30.      *  * The method name to call (priority defaults to 0)
  31.      *  * An array composed of the method name to call and the priority
  32.      *  * An array of arrays composed of the method names to call and respective
  33.      *    priorities, or 0 if unset
  34.      *
  35.      * For instance:
  36.      *
  37.      *  * array('eventName' => 'methodName')
  38.      *  * array('eventName' => array('methodName', $priority))
  39.      *  * array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  40.      *
  41.      * @return array The event names to listen to
  42.      */
  43.     public static function getSubscribedEvents(): array
  44.     {
  45.         return [
  46.             KernelEvents::FINISH_REQUEST => 'onTerminate',
  47.         ];
  48.     }
  49.     public function onTerminate(\Symfony\Component\HttpKernel\Event\FinishRequestEvent $event)
  50.     {
  51.         try {
  52.             if (!$event->isMainRequest()) {
  53.                 return;
  54.             }
  55.             if (false === $event->getRequest()->hasSession()) {
  56.                 return;
  57.             }
  58.             $user $this->security->getUser();
  59. //            if (!$this->storage->getToken()) return;
  60.             /** @var User $user */
  61. //            $user = $this->storage->getToken()?->getUser();
  62.             if (!$user instanceof User) {
  63.                 return;
  64.             }
  65.             $this->em->getRepository(User::class)->updateLastActivity($user);
  66. //            dump($res);
  67.         } catch (\Exception $exception) {
  68.             $this->logger->critical('LastActiveSubscriber', [
  69.                 'message' => $exception->getMessage(),
  70.                 'code' => $exception->getCode(),
  71.                 'line' => $exception->getLine(),
  72.                 'file' => $exception->getFile(),
  73.             ]);
  74.         }
  75.     }
  76. }