Symfony4 使用VichUploaderBundle通过API上载文件
所以,我需要的是一个基本的文件上传。我拥有的是Symfony 4和VichUploaderBundle,完全按照描述集成 实体标记为@Vich\Uploadable,字段定义正确:Symfony4 使用VichUploaderBundle通过API上载文件,symfony4,vichuploaderbundle,Symfony4,Vichuploaderbundle,所以,我需要的是一个基本的文件上传。我拥有的是Symfony 4和VichUploaderBundle,完全按照描述集成 实体标记为@Vich\Uploadable,字段定义正确: /** * @Vich\UploadableField(mapping="images", fileNameProperty="fileName") * @var File */ private $file; /** * @ORM\Column(type="string", length=255) */
/**
* @Vich\UploadableField(mapping="images", fileNameProperty="fileName")
* @var File
*/
private $file;
/**
* @ORM\Column(type="string", length=255)
*/
private $fileName;
这是我喜欢的类型:
class MyType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('file', VichImageType::class, ['allow_file_upload' => true])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => My::class,
'allow_extra_fields' => false,
'http_method' => 'POST'
]);
$resolver->setRequired('http_method');
}
}
控制器中的内容:
$form = $this->createForm(MyType::class, null);
$form->submit(array_merge($request->request->all(), $request->files->all()));
if ($form->isSubmitted() && $form->isValid()) {
/** @var $my */
$my = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($my);
$em->flush();
return $this->json($my);
}
其结果是转型例外:
复合表单在提交时需要数组或NULL
我已经用xDebug调试了整个过程——它第一次成功地提交了name
字段,甚至file
字段。但是,出于某种原因,它认为这是一个复合形式,并试图再次提交它-这显然导致了转换异常
而且,当我试图将'composite'=>设置为false时,它根本不会提交文件字段
这里可能有什么问题?我在文档中看到,在EasyAdmin中使用它,只需指定字段名并键入“vich_image”就足够了,为什么它在EasyAdmin之外不起作用?顺便说一句,您可能会注意到,我添加了额外的参数'allow_file_upload'=>true
,因为没有它它它是不会提交的,因此,进一步的研究让我找到了这个答案
解决方法是提交如下表格:
$form->submit(array_merge(
$request->request->all(),
['file' => $request->files->all()]
));
所以,进一步的研究让我找到了这个答案
解决方法是提交如下表格:
$form->submit(array_merge(
$request->request->all(),
['file' => $request->files->all()]
));