2017-11-21 3 views
0

本当に変わった問題があります。 Symfony2の一意のフォームから複数のファイルを送信しています。私はNetwork->headersをチェックして、彼らがそこにいる間、彼らは、正常に動作するように見える:Symfony2はPOSTフォームで送信された複数のファイルにアクセスできない

------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つのファイル(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

ファイルアップロードのPHP設定制限を確認しましたか?ちょっと確かめて^^画像があまりにも少ない場合は – Mcsky

+0

FileTypeのSymfony \ Component \ Form \ Extension \ Core \ Type \ CollectionTypeを宣言しようとしましたか? – Mocrates

答えて

0

symfonyの複数のオプションを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(); 
0

ご回答いただきありがとうございます。最後に私は解決策を得ました。 Aleemが言ったように

まず第一に、我々は複数のアップロードファイルを宣言しなければならなかったcreateFormBuilderとき形成:

$form = $this->createFormBuilder() 
      ->add('file', FileType::class, array(
       'multiple' => true, 
       'attr' => array(
        'data_class' => null, 
        'accept' => 'image/*', 
        'multiple' => 'multiple' 
       ) 
      )) 
      ->getForm(); 

はそれで問題がsymfonyのチュートリアルは、複数ファイルのアップロードのための準備ができていないということですので、それは難しいですしかし、それを行う方法があります。

if ($request->isMethod('POST')) { 
$data = $form->handleRequest($request)->getData(); 

次に$データ内あなたがforeachedすることができ、複数のUploadFileオブジェクトを見つけることができます:代わりにあなたがする必要がある

$form->handleRequest($request); 
if ($form->isValid() && $form->isSubmitted()) { 

それと
foreach ($data['file'] as $file) { 
       $entity = new Entity(); 
       $entity->setFile($file); 
       $entity->upload(); 

       $em->persist($entity); 
       $em->flush(); 

      } 

あなたはSetFileとによってアップロードすることができます通常、$ form-> handleRequestによって行われる操作です。

エンティティクラスでは、ライフサイクルコールバックを使用することはできません。

TY

関連する問題