Как управлять коллекцией форм с помощью VichUploaderBundle? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь настроить VichUploaderBundle, чтобы прикрепить фиксированное количество изображений к управляемой Doctrine сущности в Symfony.

Каждое изображение является сущностью, и я использую в своем контроллере форму с коллекцией.

class PosteType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('images', CollectionType::class, [
                'entry_type' => PosteImageType::class,
                'entry_options' => [
                    'label'     => false,
                    'attr' => ['class' => 'item item-file'],
                ],
                'allow_add' => false,
                'allow_delete' => false,
                'by_reference' => false,
                'prototype'    => true,
                'error_bubbling' => false,
                'required'     => true,
                'label' => 'Photos tracteur',
                'attr' => [
                    'class' => "collection collection-file collection-immutable",
                ],
                'mapped' => true,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Poste::class,
        ]);
    }
}
class PosteImageType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('file', FileType::class, [
                'label' => false,
                'required' => true,
                'multiple' => false
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => PosteImage::class,
        ]);
    }
}

Контроллер:

public function new(Request $request): Response
    {
        $poste = new Poste();

            for($i = 1; $i <= 3; $i++){
                $image = new PosteImage();
                $poste->addImage($image);
            }

        $form = $this->createForm(PosteType::class, $poste);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($poste);

            $entityManager->flush();

            return $this->redirectToRoute('new');
        }
    }

Но когда я проверяю форму, у меня загружаются только 2 изображения. если я сбрасываю данные поля изображений в моем контроллере, у меня есть одно из 3 изображений, которое остается UploadFile:

ArrayCollection {#1607 ▼
  -elements: array:3 [▼
    0 => PosteImage {#1243 ▼
      -id: null
      -file: File {#2187 ▶}
      -nom: "5db9997bc6f3b172486170.jpg"
      -dateCreation: DateTime @1572444539 {#1727 ▶}
      -poste: Poste {#973 ▶}
    }
    1 => PosteImage {#1245 ▼
      -id: null
      -file: File {#2180 ▶}
      -nom: "5db9997bc78df327681101.jpg"
      -dateCreation: DateTime @1572444539 {#1735 ▶}
      -poste: Poste {#973}
    }
    2 => PosteImage {#1246 ▼
      -id: null
      -file: UploadedFile {#18 ▶}
      -nom: null
      -dateCreation: DateTime @1572444539 {#1744 ▶}
      -poste: Poste {#973}
    }
  ]
}

Если я загружаю 2 изображения, все работает, если я загружаю 3 или более изображений, только n-1скачали.

...