<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ArchivesFilterSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => 'applyArchivesFilter',
];
}
public function applyArchivesFilter(RequestEvent $event): void
{
if ($event->getRequest()->attributes->get('_api_resource_class') !== User::class) {
return;
}
$archived = $event->getRequest()->query->get('archived', null);
$filters = $this->em->getFilters();
$filters->enable('archives');
$archivedFilter = $filters->getFilter('archives');
$archivedFilter->setParameter('archived', $archived === null ? false : $archived, 'boolean');
}
}