src/EventSubscriber/ReferenceSubscriber.php line 32

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use ApiPlatform\Core\EventListener\EventPriorities;
  4. use App\Entity\Reservation;
  5. use App\Entity\User;
  6. use App\Service\Utils;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use JetBrains\PhpStorm\ArrayShape;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpKernel\Event\ViewEvent;
  12. use Symfony\Component\HttpKernel\KernelEvents;
  13. class ReferenceSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(private ManagerRegistry $dm)
  16.     {
  17.     }
  18.     #[
  19.         ArrayShape([KernelEvents::VIEW => "array"])
  20.     ]
  21.     public static function getSubscribedEvents(): array
  22.     {
  23.         return [
  24.             KernelEvents::VIEW => ['addReference'EventPriorities::PRE_WRITE],
  25.         ];
  26.     }
  27.     public function addReference(ViewEvent $event): void
  28.     {
  29.         $entity $event->getControllerResult();
  30.         $method $event->getRequest()->getMethod();
  31.         if (!($entity instanceof User || $entity instanceof Reservation) || Request::METHOD_POST !== $method) {
  32.             return;
  33.         }
  34.         $repository $this->dm->getRepository($entity::class);
  35.         $referenceGenerate Utils::generateCodeUnique($repository'reference');
  36.         $entity->setReference($referenceGenerate);
  37.     }
  38. }