ここで説明した方法を使用して複数のファイルのアップロードを実装していますが、それを機能させる方法が見つかりません。すでに多くの質問があることは承知していますが、私のケースに適した答えが見つかりませんでした.
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) には、何があっても空の配列が表示されます。
任意の助けをいただければ幸いです =) 必要と思われる場合は、より多くのコードを求めることを躊躇しないでください。
ありがとうございました !