【发布时间】:2019-11-18 22:06:09
【问题描述】:
所以,我需要的是一个基本的文件上传。我所拥有的是 Symfony 4 和 VichUploaderBundle,完全按照 https://symfony.com/doc/current/bundles/EasyAdminBundle/integration/vichuploaderbundle.html 的描述进行了集成
实体被标记为@Vich\Uploadable,字段定义正确:
/**
* @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);
}
结果是一个 TransformationException:
复合表单在提交时需要一个数组或 NULL。
我已经用 xDebug 调试了整个事情——它第一次成功提交了name 字段,甚至file 字段。但是后来,由于某种原因,它认为这是一个复合表单并尝试再次提交 - 这显然会导致转换异常https://github.com/symfony/form/blob/master/Form.php#L571
而且,当我尝试设置'compound' => false 时,它根本不提交文件字段。
这里可能有什么问题?我在文档中看到,将它与 EasyAdmin 一起使用就足够了,只需指定字段名称并输入“vich_image”,为什么它在 EasyAdmin 之外不起作用?顺便说一句,您可能会注意到我添加了额外的参数'allow_file_upload' => true,因为没有它就无法提交https://github.com/symfony/form/blob/master/Form.php#L534
【问题讨论】:
标签: symfony4 vichuploaderbundle