Php 如何在Symfony 4中通过文件上传提交和验证多部分/表单数据表单?
我正试图通过axios/ajax上传一个文件。 我正在上传文件,如下所示: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
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的评论,它给了我真假,表单正在提交,但它无效。