<?php
namespace App\V4\EventSubscriber\CustomEventTrigger;
use App\V4\Builder\CustomEventTrigger\CustomEventTriggerBuilder;
use App\V4\Entity\CustomEventTrigger;
use App\V4\Repository\CustomEventTriggerRepository;
use App\V4\Transformer\FQCNToShortNameTransformer;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class CustomEventTriggerPreSubmitSubscriber implements EventSubscriberInterface
{
/**
* @var CustomEventTriggerRepository
*/
private $customEventTriggerRepository;
/**
* @var CustomEventTriggerBuilder
*/
private $customEventTriggerBuilder;
/**
* @param CustomEventTriggerRepository $customEventTriggerRepository
* @param CustomEventTriggerBuilder $customEventTriggerBuilder
*/
public function __construct(
CustomEventTriggerRepository $customEventTriggerRepository,
CustomEventTriggerBuilder $customEventTriggerBuilder
) {
$this->customEventTriggerRepository = $customEventTriggerRepository;
$this->customEventTriggerBuilder = $customEventTriggerBuilder;
}
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SUBMIT => 'onPreSubmit',
];
}
/**
* @param FormEvent $event
*
* @return void
*/
public function onPreSubmit(FormEvent $event): void
{
$data = $event->getData();
$customEventTriggers = $this
->customEventTriggerRepository
->searchByEntityAndWhenApply(
(new FQCNToShortNameTransformer())->transform($event->getForm()->getConfig()->getDataClass()),
CustomEventTrigger::WHEN_PRE_SUBMIT
)
;
foreach ($customEventTriggers as $customEventTrigger) {
$data = $this
->customEventTriggerBuilder
->getBuilder($data, $customEventTrigger)
->apply($data, $customEventTrigger)
;
}
$event->setData($data);
}
}