1

ここで説明した方法を使用して複数のファイルのアップロードを実装していますが、それを機能させる方法が見つかりません。すでに多くの質問があることは承知していますが、私のケースに適した答えが見つかりませんでした.

Name、Content、および Type 属性を持つファイル エンティティのおかげで、ファイルのコンテンツをデータベースに保存していることに注意してください。ただし、機能させるために、フォームをこのエンティティにマッピングしていません。

したがって、私のコントローラーは次のようになります。

    $files = [];

    $form = $this->createForm(MultipleFilesType::class, []);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $files = $form->getData();

        dump($files);

        foreach ($files as $file)
        {
            //code that stores the file in the database which works fine and is not relevant to my problems I think
        }
        return // redirect to some page
    }

    return //form to the view

私の MultipleFilesType は、複数の addFileType を埋め込んだコレクションです:

class MultipleFilesType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('files', CollectionType::class, array (
            'entry_type' => addFileType::class,
            'allow_add' => true,
            'allow_delete' => true,
            'label' => false,
            'mapped' => false,
            'data' => array(
               array ('file' => null)
            )
        ))
    ;
}
}

私のaddFileTypeはこれです:

class AddFileType extends AbstractType
{


/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('file', FileType::class, array (
            'label' => false
        ))
    ;

}
}

私の見解では、リンクされたドキュメントで説明されているいくつかの JQuery のおかげで、フィールドを追加/削除できます。(コードはドキュメント内のコードとほぼ同じですが、Entites を扱っていないため、ここでは示していません)。

最初に単一ファイルのアップロードを試みましたが、うまくいきました。次に、collectionType と $files 配列を使用して、フォームからコントローラーにデータを取得する上記のコードを試しましたが、次の問題が発生しています。

フォームを送信すると、最初のファイル以降のファイルの値が無効になっているようです。

ファイルを 1 つだけ送信すると (検証エラーはありません)、コントローラーのダンプ ($files) には、何があっても空の配列が表示されます。

任意の助けをいただければ幸いです =) 必要と思われる場合は、より多くのコードを求めることを躊躇しないでください。

ありがとうございました !

4

2 に答える 2