<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Gedmo\Blameable\BlameableListener;
use Gedmo\Loggable\LoggableListener;
use Gedmo\Translatable\TranslatableListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class DoctrineExtensionSubscriber implements EventSubscriberInterface
{
/**
* @var BlameableListener
*/
private BlameableListener $blameableListener;
/**
* @var TokenStorageInterface
*/
private TokenStorageInterface $tokenStorage;
/**
* @var LoggableListener
*/
private LoggableListener $loggableListener;
/**
* DoctrineExtensionSubscriber constructor.
* @param BlameableListener $blameableListener
* @param TokenStorageInterface $tokenStorage
* @param LoggableListener $loggableListener
*/
public function __construct(
BlameableListener $blameableListener,
TokenStorageInterface $tokenStorage,
LoggableListener $loggableListener
) {
$this->blameableListener = $blameableListener;
$this->tokenStorage = $tokenStorage;
$this->loggableListener = $loggableListener;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
KernelEvents::FINISH_REQUEST => 'onLateKernelRequest'
];
}
public function onKernelRequest(): void
{
if ($this->tokenStorage->getToken() !== null &&
$this->tokenStorage->getToken()->isAuthenticated() === true
) {
$user = $this->tokenStorage->getToken()->getUser(); // apply blameableListener only if logged user is instance of User (not AdminUser)
if ($user instanceof User) {
$this->blameableListener->setUserValue($this->tokenStorage->getToken()->getUser());
}
}
}
public function onLateKernelRequest(FinishRequestEvent $event): void
{
}
}