<?php
namespace App\Subscriber;
use App\Doctrine\InvoiceFilter;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class InjectUserDoctrineFilterSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $entityManager;
private TokenStorageInterface $tokenStorage;
public function __construct(EntityManagerInterface $entityManager, TokenStorageInterface $tokenStorage)
{
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => 'injectUserId',
];
}
public function injectUserId(RequestEvent $event): void
{
if (null === $this->tokenStorage->getToken()) {
return;
}
/** @var InvoiceFilter $filter */
$filter = $this->entityManager->getFilters()->getFilter('invoice');
$filter->setUserId($this->tokenStorage->getToken()->getUser()->getId());
}
}