vendor/stof/doctrine-extensions-bundle/src/EventListener/LoggerListener.php line 41

  1. <?php
  2. namespace Stof\DoctrineExtensionsBundle\EventListener;
  3. use Gedmo\Loggable\Loggable;
  4. use Gedmo\Loggable\LoggableListener;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. use Symfony\Component\HttpKernel\KernelEvents;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  11. /**
  12.  * Sets the username from the security context by listening on kernel.request
  13.  *
  14.  * @author Christophe Coevoet <stof@notk.org>
  15.  *
  16.  * @phpstan-template T of Loggable|object
  17.  */
  18. class LoggerListener implements EventSubscriberInterface
  19. {
  20.     private ?AuthorizationCheckerInterface $authorizationChecker;
  21.     private ?TokenStorageInterface  $tokenStorage;
  22.     /** @var LoggableListener<T> */
  23.     private LoggableListener $loggableListener;
  24.     /**
  25.      * @param LoggableListener<T> $loggableListener
  26.      */
  27.     public function __construct(LoggableListener $loggableListenerTokenStorageInterface $tokenStorage nullAuthorizationCheckerInterface $authorizationChecker null)
  28.     {
  29.         $this->loggableListener $loggableListener;
  30.         $this->tokenStorage $tokenStorage;
  31.         $this->authorizationChecker $authorizationChecker;
  32.     }
  33.     /**
  34.      * @internal
  35.      */
  36.     public function onKernelRequest(RequestEvent $event): void
  37.     {
  38.         if (!$event->isMainRequest()) {
  39.             return;
  40.         }
  41.         if (null === $this->tokenStorage || null === $this->authorizationChecker) {
  42.             return;
  43.         }
  44.         $token $this->tokenStorage->getToken();
  45.         if (null !== $token && $this->authorizationChecker->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  46.             $this->loggableListener->setUsername($token);
  47.         }
  48.     }
  49.     public static function getSubscribedEvents()
  50.     {
  51.         return array(
  52.             KernelEvents::REQUEST => 'onKernelRequest',
  53.         );
  54.     }
  55. }