src/Form/EventListener/BuildProductFieldsFormSubscriber.php line 66

Open in your IDE?
  1. <?php
  2. namespace App\Form\EventListener;
  3. use App\Entity\Product;
  4. use App\Entity\ProductField;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\Form\DataMapperInterface;
  7. use Symfony\Component\Form\Exception;
  8. use Symfony\Component\Form\FormEvent;
  9. use Symfony\Component\Form\FormEvents;
  10. use Symfony\Component\Form\FormInterface;
  11. use Webmozart\Assert\Assert;
  12. class BuildProductFieldsFormSubscriber implements EventSubscriberInterface
  13. {
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         // TODO: Implement getSubscribedEvents() method.
  17.         return [
  18.             FormEvents::PRE_SET_DATA => 'preSetData',
  19.             FormEvents::POST_SUBMIT => 'postSubmit',
  20.         ];
  21.     }
  22.     public function preSetData(FormEvent $event){
  23.         /** @var $product Product|mixed */
  24.         $product $event->getData();
  25.         $productTypeFields $product->getProductType()->getProductTypeFields();
  26.         $productFields $product->getProductFields()->getValues();
  27.         //dump($productFields);
  28.         foreach($productTypeFields as $typeField){
  29.             $field = new ProductField();
  30.             $field->setProductTypeField($typeField);
  31.             $field->setProduct($product);
  32.             $value '';
  33.             foreach($productFields as $productField){
  34.                 /** @var $productField ProductField */
  35.                 if ($productField->getProductTypeField() === $typeField){
  36.                     $value $productField->getValue();
  37.                     $product->removeProductField($productField);
  38.                 }
  39.             }
  40.             $field->setValue($value);
  41.             $product->addProductField($field);
  42.         }
  43.         //$productFields = $product->getProductFields()->getValues();
  44.         //dd($productFields);
  45.     }
  46.     /**
  47.      * @throws \InvalidArgumentException
  48.      */
  49.     public function postSubmit(FormEvent $event): void
  50.     {
  51.         $product $event->getData();
  52.         $fields $product->getProductFields();
  53.         //dd($product);
  54.         /** @var ProductField $productField */
  55.         foreach ($product->getProductFields() as $productField) {
  56.             if (null === $productField->getValue()) {
  57.                 $product->removeProductField($productField);
  58.             }
  59.         }
  60.         //dd($product);
  61.     }
  62. }