src/V4/EventSubscriber/Form/PartialFormSubmitValidationEventSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\V4\EventSubscriber\Form;
  4. use App\Form\Type\AbstractViewOrderAwareType;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Form\Event\PostSubmitEvent;
  7. use Symfony\Component\Form\Event\PreSubmitEvent;
  8. use Symfony\Component\Form\FormEvents;
  9. class PartialFormSubmitValidationEventSubscriber implements EventSubscriberInterface
  10. {
  11.     public static function getSubscribedEvents(): array
  12.     {
  13.         return [
  14.             FormEvents::PRE_SUBMIT => 'onPreSubmit',
  15.             FormEvents::POST_SUBMIT => 'onPostSubmit',
  16.         ];
  17.     }
  18.     public function onPreSubmit(PreSubmitEvent $event): void
  19.     {
  20.         if (!$event->getForm()->getConfig()->getOption(AbstractViewOrderAwareType::FORM_CONFIG_ENABLE_PARTIAL_SUBMIT_VALIDATION)) {
  21.             return;
  22.         }
  23.         foreach ($event->getForm()->all() as $field) {
  24.             if (isset($event->getData()[$field->getName()])) {
  25.                 continue;
  26.             }
  27.             $event->getForm()->remove($field->getName());
  28.         }
  29.     }
  30.     public function onPostSubmit(PostSubmitEvent $event): void
  31.     {
  32.         if (!$event->getForm()->getConfig()->getOption(AbstractViewOrderAwareType::FORM_CONFIG_ENABLE_PARTIAL_SUBMIT_VALIDATION)) {
  33.             return;
  34.         }
  35.         $allFormErrors $event->getForm()->getErrors(true);
  36.         $event->getForm()->clearErrors(true);
  37.         foreach ($allFormErrors->getChildren() as $error) {
  38.             $error->getForm()->addError($error);
  39.         }
  40.     }
  41. }