Я пытаюсь настроить 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скачали.