Zastanawiam się jak podejść do takiego tematu: mam dwie entity:
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;
}
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder
->add('catalogNo', ChoiceType
::class, array( 'attr' => array('class' => 'select2live','required'=>'required'), '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;
}
}