src/EventSubscriber/TrashFilterSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Controller\Admin\Trash\AbstractTrashCrudController;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. use Symfony\Component\HttpKernel\KernelEvents;
  8. /**
  9.  * Papierkorb (AWM-1081): Der globale softdeleteable-Filter blendet Gelöschte
  10.  * überall aus — die Papierkorb-Masken sollen aber genau diese anzeigen.
  11.  * Für Requests an Trash-CrudController wird der Filter daher deaktiviert;
  12.  * die Controller selbst schränken auf "deletedAt IS NOT NULL" ein.
  13.  */
  14. class TrashFilterSubscriber implements EventSubscriberInterface
  15. {
  16.     private $em;
  17.     public function __construct(EntityManagerInterface $em)
  18.     {
  19.         $this->em $em;
  20.     }
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         // Nach Firewall (8) und Allowlist (1), vor EasyAdmins Context-Aufbau (0)
  24.         return [KernelEvents::REQUEST => ['onKernelRequest'1]];
  25.     }
  26.     public function onKernelRequest(RequestEvent $event): void
  27.     {
  28.         if (!$event->isMainRequest()) {
  29.             return;
  30.         }
  31.         $controllerFqcn ltrim((string) $event->getRequest()->query->get('crudControllerFqcn'), '\\');
  32.         if ('' === $controllerFqcn || !class_exists($controllerFqcn)) {
  33.             return;
  34.         }
  35.         if (!is_subclass_of($controllerFqcnAbstractTrashCrudController::class)) {
  36.             return;
  37.         }
  38.         $filters $this->em->getFilters();
  39.         if ($filters->isEnabled('softdeleteable')) {
  40.             $filters->disable('softdeleteable');
  41.         }
  42.     }
  43. }