<?php
declare(strict_types=1);
namespace App\V4\EventSubscriber\Form;
use App\Form\Type\AbstractViewOrderAwareType;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Event\PostSubmitEvent;
use Symfony\Component\Form\Event\PreSubmitEvent;
use Symfony\Component\Form\FormEvents;
class PartialFormSubmitValidationEventSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SUBMIT => 'onPreSubmit',
FormEvents::POST_SUBMIT => 'onPostSubmit',
];
}
public function onPreSubmit(PreSubmitEvent $event): void
{
if (!$event->getForm()->getConfig()->getOption(AbstractViewOrderAwareType::FORM_CONFIG_ENABLE_PARTIAL_SUBMIT_VALIDATION)) {
return;
}
foreach ($event->getForm()->all() as $field) {
if (isset($event->getData()[$field->getName()])) {
continue;
}
$event->getForm()->remove($field->getName());
}
}
public function onPostSubmit(PostSubmitEvent $event): void
{
if (!$event->getForm()->getConfig()->getOption(AbstractViewOrderAwareType::FORM_CONFIG_ENABLE_PARTIAL_SUBMIT_VALIDATION)) {
return;
}
$allFormErrors = $event->getForm()->getErrors(true);
$event->getForm()->clearErrors(true);
foreach ($allFormErrors->getChildren() as $error) {
$error->getForm()->addError($error);
}
}
}