Product , ProductDocument z relacją ManyToOne (zdjęcia do produktu).
Uzytkownik dodaje produkt (form builder) w tym formularzu mam odrazu pole typu hidden w którym wrzucam nazwy plików (document) które wgrał przez plugin ajaxowy. Czyli wartość tego pola będzie przykładowo:
"plik1.jpg;plik2.jpg;plik3.jpg"
Potrzebuje z powyższego stringa wyciągnąć nazwę pliku , stworzyć obiekt ProductDocument i powiazać z Product.
W obecniej chwili ten formularz zapisuje mi Product , natomiast ProductDocument tez dodaje się ale bez powiazania z Product, ponadto dodaj mi pełną wartość do nazwy ""plik1.jpg;plik2.jpg;plik3.jpg"" zamiast każdy oddzielnie. Wiem że trzeba użyć explode(';'.$wartosc) ale nie wiem gdzie
w ProduktForm mam
class ProductFormType extends AbstractType { private $transformer; public function __construct(DocumentTransformer $transformer) { $this->transformer = $transformer; } { $builder 'choices'=>array() )) ->add('productDocument', HiddenType::class) ->add('purchasedAt', DateType::class, [ 'widget' => 'single_text', 'attr' => ['class' => 'js-datepicker'], 'html5' => false, ]); $builder->get('productDocument')->addModelTransformer($this->transformer); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => 'AppBundle\Entity\Product' ]); } public function getBlockPrefix() { return 'app_bundle_product'; } }
DataTransformer.php
class DocumentTransformer implements DataTransformerInterface { private $em; public function __construct(EntityManagerInterface $em) { $this->em = $em; } public function transform($document) { // TODO: Implement transform() method. if(null == $document) { return ''; } return $document->getId(); } public function reverseTransform($files) { if(!$files) { return; } $document = new ProductDocument(); $document->setName($files); return $document; } }