2017-02-25 2 views
1

私のSymfony Webアプリケーションでは、複数のファイルをアップロードできる形式が用意されています。multipleプロパティーをtrueに設定してください。そして、これはうまくいく:私は複数のファイルを選択し、それらをアップロードすることができます。フォームを処理し、アップロードされたすべてのファイルを取得することもうまくいく。しかし、もちろん、私はが統合テストを予告したいWebTestCaseしかし、私は複数のファイルのアップロードをシミュレートする可能性はないと思う。Symfony FileFormField - 複数のファイルアップロードをテストする(WebTestCase)

は、私が今持っている:

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

正常に動作します。

しかし、今、私は(複数のファイルを一度にアップロードされた場合、処理ロジックは異なる動作をすることができますので、)1つのフォームの送信により、2つのファイルをアップロードします。 どうすればいいですか?http://api.symfony.com/3.0/Symfony/Component/DomCrawler/Field/FileFormField.htmlを見ると、例えば、UploadedFileのオブジェクトの配列など、渡す方法はありません。誰でもこの経験がありますか?

答えて

0

プロパティが設定されている場合、クローラは、単一のFileFormFieldフィールドのファイルフォームフィールド配列を作成します。 1つのフィールドで1つのファイルを保持できるため、複数のファイルに複数のフィールドが必要です。私は、手動でフォームに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] 

]); 
関連する問題