我有一个非常奇怪的问题。我在Symfony2中从一个唯一的表单发送多个文件。它们似乎正常工作,而我检查Network->headers
并且它们在那里:
------WebKitFormBoundaryqycNCCLBhUXBkZAv
Content-Disposition: form-data; name="form[files]";
filename="image1.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryqycNCCLBhUXBkZAv
Content-Disposition: form-data; name="form[files]";
filename="image2.png"
Content-Type: image/png
但是,当我尝试从控制器获取这些文件时,我无法获得这些文件:
$form->handleRequest($request)->getData()
只显示一个文件(第1个),$request->files
的工作方式相同,仅显示第1个文件。
不应该这么复杂:/
这是我在控制器中的表单代码:
$form = $this->createFormBuilder($data)
->add('name')
//->add('file')
->add('files', FileType::class, array(
'attr' => array(
'data_class' => null,
'accept' => 'image/*',
'multiple' => true
)
))
->getForm();
你知道我在这里做错了吗?
答案 0 :(得分:0)
您需要将symfony multiple选项设置为true。
$form = $this->createFormBuilder($data)
->add('name')
//->add('file')
->add('files', FileType::class, array(
'multiple'=>true
'attr' => array(
'data_class' => null,
'accept' => 'image/*',
'multiple' => 'multiple'
)
))
->getForm();
答案 1 :(得分:0)
非常感谢你的回答。最后我得到了解决方案。
首先,正如Aleem所说,我们必须在createFormBuilder时声明多个上传文件:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<data android:scheme="glassify" android:host="open" />
<action android:name="android.intent.action.VIEW" />
<!-- <category android:name="android.intent.category.DEFAULT" /> -->
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
问题在于Symfony教程还没有为多个文件上传做好准备,所以,这很棘手,但有一种方法可以做到。而不是
$form = $this->createFormBuilder()
->add('file', FileType::class, array(
'multiple' => true,
'attr' => array(
'data_class' => null,
'accept' => 'image/*',
'multiple' => 'multiple'
)
))
->getForm();
你必须:
$form->handleRequest($request);
if ($form->isValid() && $form->isSubmitted()) {
然后在$ data中你可以找到多个可以预告的UploadFile对象:
if ($request->isMethod('POST')) {
$data = $form->handleRequest($request)->getData();
你可以自己设置SetFile并上传,这个操作通常由$ form-&gt; handleRequest完成。
在您的Entity类中,您不能使用Lifecycle Callbacks。
TY