<?php
namespace App\Form\EventListener;
use App\Entity\Product;
use App\Entity\ProductField;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\DataMapperInterface;
use Symfony\Component\Form\Exception;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Webmozart\Assert\Assert;
class BuildProductFieldsFormSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
// TODO: Implement getSubscribedEvents() method.
return [
FormEvents::PRE_SET_DATA => 'preSetData',
FormEvents::POST_SUBMIT => 'postSubmit',
];
}
public function preSetData(FormEvent $event){
/** @var $product Product|mixed */
$product = $event->getData();
$productTypeFields = $product->getProductType()->getProductTypeFields();
$productFields = $product->getProductFields()->getValues();
//dump($productFields);
foreach($productTypeFields as $typeField){
$field = new ProductField();
$field->setProductTypeField($typeField);
$field->setProduct($product);
$value = '';
foreach($productFields as $productField){
/** @var $productField ProductField */
if ($productField->getProductTypeField() === $typeField){
$value = $productField->getValue();
$product->removeProductField($productField);
}
}
$field->setValue($value);
$product->addProductField($field);
}
//$productFields = $product->getProductFields()->getValues();
//dd($productFields);
}
/**
* @throws \InvalidArgumentException
*/
public function postSubmit(FormEvent $event): void
{
$product = $event->getData();
$fields = $product->getProductFields();
//dd($product);
/** @var ProductField $productField */
foreach ($product->getProductFields() as $productField) {
if (null === $productField->getValue()) {
$product->removeProductField($productField);
}
}
//dd($product);
}
}