Я разрабатываю программу загрузки нескольких файлов.
Чтобы понять свою проблему, я постараюсь вам ее описать:
I have two Entities (Objects and Images) with an "1 ... n" Relation, so that every Object can have "n" Images.
Если я попытаюсь загрузить несколько изображений, мой контроллер выдаст исключение, но я не использую объект Images. Не знаю, как решить эту проблему и получить работающий загрузчик.
Expected argument of type "App\Entity\Images", "Symfony\Component\HttpFoundation\File\UploadedFile" given.
Контроллер:
/**
* @Route("/new", name = "objects_new", methods = "GET|POST")
*/
public function new(Request $request): Response
{
$object = new Objects();
$form = $this->createForm(ObjectsType::class, $object);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$file = $form->get('logo')->getData();
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension();
$file->move(
$this->getParameter('logo_directory'),
$fileName
);
$object->setLogo($fileName);
foreach ($request->files as $uploadedFile) {
$uploadedFile = current($uploadedFile['file']);
dump($uploadedFile);
}
$em->persist($object);
$em->flush();
return $this->redirectToRoute('home');
}
return $this->render('objects/new.html.twig', [
'object' => $object,
'form' => $form->createView(),
]);
}
Сущность объектов:
/**
* @ORM\OneToMany(targetEntity = "App\Entity\Images", mappedBy = "objects")
*/
private $images;
Сущность изображений:
/**
* @ORM\ManyToOne(targetEntity = "App\Entity\Objects", inversedBy = "images")
*/
private $objects;
ObjectsType:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('designation')
->add('description')
->add('place')
->add('coordL', null, array(
'attr' => array('readonly' => 'true'),
))
->add('coordB', null, array(
'attr' => array('readonly' => 'true'),
))
->add('category')
->add('logo', FileType::class, array('label' => ' ', 'data_class' => null))
->add('images', FileType::class, array('label' => 'Bilder (png, jpg, jpeg)', 'data_class' => null, 'multiple' => true))
;
}
Если кто-то знает, как решить мою проблему, помогите мне, пожалуйста.


Ваше поле $images настроено на тип App\Entity\Images, но в вашем FormType вы устанавливаете его на FileType.
Вот строчка, о которой я говорю:
->add('images', FileType::class, array('label' => 'Bilder (png, jpg, jpeg)', 'data_class' => null, 'multiple' => true))
С этого момента у вас есть несколько способов решить вашу проблему, среди которых:
Либо добавьте параметр mapped => false в это поле в вашем FormType, а затем обработайте процесс (преобразования файла в объект Image) вручную с вашего контроллера.
Или создайте собственный ImageFormType, сопоставленный с вашей сущностью Image, который содержит ваше поле FileType (хотя может потребоваться некоторый хитрый код)
Видеть : тип формы отображается ложно symfony2 и https://symfony.com/doc/current/form/create_custom_field_type.html для получения дополнительной информации.
Спасибо, я понял;)