我有那个表格(扩展AbstractType
):
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('files', FileFieldType::class, [
'label' => 'Files',
'multiple' => true]
);
}
前端的这个小形式(ReactJS):
<form onChange={onChange} ref={node => form = node}>
<input type="file" multiple={multiple} name="file[files]" />
</form>
我上传被触发,发生以下情况:
const data = new FormData(form);
fetch('/upload', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data'
},
body: data
});
但是在服务器上没有文件到达,所以在控制器中:
$request->files->all(); //[]
因此表格永远无效。
在功能测试中我使用它:
$client->request('POST', '/upload', [], ['file' => ['files' => $file]]);
其中$file
指的是UploadedFile
类型的对象。这有效,那么这里的错误是什么?
答案 0 :(得分:1)
正如我在this answer中找到的那样:
基本思想是每个部分(在与 - 的边界中用字符串分割)具有它自己的标题(例如,第二部分中的Content-Type。)FormData对象为您管理所有这些,所以这是实现目标的更好方式。
因此,要使上传工作,我需要从标题中删除content-type
并将输入字段重命名为:file[files][]
。