<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\Reservation;
use App\Entity\User;
use App\Service\Utils;
use Doctrine\Persistence\ManagerRegistry;
use JetBrains\PhpStorm\ArrayShape;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class ReferenceSubscriber implements EventSubscriberInterface
{
public function __construct(private ManagerRegistry $dm)
{
}
#[
ArrayShape([KernelEvents::VIEW => "array"])
]
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => ['addReference', EventPriorities::PRE_WRITE],
];
}
public function addReference(ViewEvent $event): void
{
$entity = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!($entity instanceof User || $entity instanceof Reservation) || Request::METHOD_POST !== $method) {
return;
}
$repository = $this->dm->getRepository($entity::class);
$referenceGenerate = Utils::generateCodeUnique($repository, 'reference');
$entity->setReference($referenceGenerate);
}
}