Forms Symfony FileFormField-测试(WebTestCase)多文件上载

Forms Symfony FileFormField-测试(WebTestCase)多文件上载,forms,symfony,Forms,Symfony,在我的Symfony web应用程序中,我有一个允许多文件上传的表单(通过将FileType的multiple属性设置为true即可轻松完成)。这很好:我可以选择多个文件并上传它们。处理表单和获取所有上传的文件也很顺利。但是当然,我想预见一个集成测试(WebTestCase)但是我没有发现任何可能模拟多文件上传。 我现在所拥有的: ... $uploadedFile = new UploadedFile(...); $form = ...; // get the form from the cr

在我的Symfony web应用程序中,我有一个允许多文件上传的表单(通过将
FileType
multiple
属性设置为
true
即可轻松完成)。这很好:我可以选择多个文件并上传它们。处理表单和获取所有上传的文件也很顺利。但是当然,我想预见一个集成测试
WebTestCase
但是我没有发现任何可能模拟多文件上传。

我现在所拥有的:

...
$uploadedFile = new UploadedFile(...);
$form = ...; // get the form from the crawler
$form['formtype[filename]'][0]->upload($uploadedFile);
$this->client->submit($form);
...
那很好


但是现在我想通过一个表单提交上传2个文件(因为当一次上传多个文件时,处理逻辑的行为可能会有所不同)我如何才能做到这一点?当我查看时,我看不到任何传入的方法,例如,
UploadedFile
对象的数组。有人使用过这个吗?

如果设置了
多个
属性,爬虫程序将使用单个
FileFormField
字段创建一个文件表单字段数组。一个字段可以保存一个文件,因此您需要多个字段来保存多个文件。我通过手动向表单中添加更多
FileFormField
找到了解决方案

$form = ...
// get file field node in DOM
$node = $crawler->filter("input[name='formtype[filename][]']")->getNode(0);

// add additional fields to form (you can create as many as you need)
$newField = new FileFormField($node);
$form->set($newField);
...
// set files with upload()
$form['formtype[filename]'][0]->upload($uploadedFile1);
$form['formtype[filename]'][1]->upload($uploadedFile2);
...

//or with submit values 
$crawler->submit($form, [
  ...
 'formtype[filename]' => [$uploadedFile1, $uploadedFile2]

]);

如果设置了
multiple
属性,爬虫程序将使用单个
FileFormField
字段创建一个文件表单字段数组。一个字段可以保存一个文件,因此您需要多个字段来保存多个文件。我通过手动向表单中添加更多
FileFormField
找到了解决方案

$form = ...
// get file field node in DOM
$node = $crawler->filter("input[name='formtype[filename][]']")->getNode(0);

// add additional fields to form (you can create as many as you need)
$newField = new FileFormField($node);
$form->set($newField);
...
// set files with upload()
$form['formtype[filename]'][0]->upload($uploadedFile1);
$form['formtype[filename]'][1]->upload($uploadedFile2);
...

//or with submit values 
$crawler->submit($form, [
  ...
 'formtype[filename]' => [$uploadedFile1, $uploadedFile2]

]);