预期参数,多个文件上传Symfony吗?

时间:2018-08-07 13:30:52

标签: sql symfony exception doctrine

iam开发了多个文件上传器。

要了解我的问题,我尝试为您描述一下:

  

我有两个具有“ 1 ... n”关系的实体(对象和图像),因此每个对象都可以具有“ n”个图像。

如果我尝试上传一些图片,我的控制器会抛出一些异常,但是我不使用图片实体。不知道如何解决此问题并获得一些可以正常工作的Uploader。

  

给出类型为“ App \ Entity \ Images”,“ Symfony \ Component \ HttpFoundation \ File \ UploadedFile”的预期参数。

控制器:

/**
 * @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))
    ;
}

如果有人知道如何解决我的问题,请帮助我。

1 个答案:

答案 0 :(得分:1)

您的$images字段设置为App\Entity\Images类型,但是在您的FormType中,您将其设置为FileType

这是我正在谈论的那一行:

->add('images', FileType::class, array('label' => 'Bilder (png, jpg, jpeg)', 'data_class' => null, 'multiple' => true))

从这一点出发,您有几种解决问题的方法,其中:

  • 可以在FormType的该字段中添加“ mapped => false”选项,然后从控制器手动处理该过程(将文件转换为Image实体)。

  • 或进行自定义ImageFormType映射到您的Image实体,该实体包含您的FileType字段(尽管可能需要一些棘手的代码)

请参阅: form type mapped false symfony2https://symfony.com/doc/current/form/create_custom_field_type.html以获得更多信息。