Php 如何在Symfony 4中通过文件上传提交和验证多部分/表单数据表单?

Php 如何在Symfony 4中通过文件上传提交和验证多部分/表单数据表单?,php,ajax,symfony,axios,symfony4,Php,Ajax,Symfony,Axios,Symfony4,我正试图通过axios/ajax上传一个文件。 我正在上传文件,如下所示: const formData = new FormData(); formData.append('logoFile', e.files[0]); axios.post('/startups/logo', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }) 然后,在Symfony 4上,我想创建实体并验证使用formT

我正试图通过axios/ajax上传一个文件。 我正在上传文件,如下所示:

const formData = new FormData();
formData.append('logoFile', e.files[0]);

axios.post('/startups/logo', formData, {
  headers: {
    'Content-Type': 'multipart/form-data',
  },
})
然后,在Symfony 4上,我想创建实体并验证使用formType创建的表单:

class LogoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Remember username is email
        $builder
            ->add('logoFile', VichFileType::class, [
                'label'         => false,
                'required'      => false,
                'allow_delete'  => false,
                'download_uri'  => true,
                'download_label' => true,
                'download_link' => true,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection' => false,
        ));
    }
}
我的表单类型:

class LogoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Remember username is email
        $builder
            ->add('logoFile', VichFileType::class, [
                'label'         => false,
                'required'      => false,
                'allow_delete'  => false,
                'download_uri'  => true,
                'download_label' => true,
                'download_link' => true,
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection' => false,
        ));
    }
}
但在我的控制器中,我永远无法验证表单:

public function updateLogo(Request $request): Response
{

    $image = $request->files->get('logoFile');

    if(!$image instanceof UploadedFile) {
        throw new HttpException(400, "Cannot find a file to upload. Try again.");
    }
    //$image is now an instance of Symfony\Component\HttpFoundation\File\UploadedFile
    // THIS WORKS ^^ dd($image) does show the file properly

    $logo = new Logo();
    $form = $this->createForm(LogoType::class, $logo);
    $form->submit($request->files->all());

    if ($form->isSubmitted() && $form->isValid()) {
      // THIS PART NEVER GETS HIT.
    }
注意,尝试执行
$form->handleRequest($request)不起作用,
$form->submit($request->request->all())这通常是验证通过ajax提交的表单的方法

有人知道如何验证包含多部分/表单数据的文件集的表单吗


谢谢大家。

var_dump($form->isSubmitted())和var_dump($form->isValid())给了你们什么?感谢Blackam的评论,它给了我真假,表单正在提交,但它无效。