hereの方法を使用して複数のファイルを実装していますが、動作させる方法が見つかりません。私はすでにそれについて多くの質問があることを知っていますが、私は私の場合に適切な答えを見つけることができませんでした。symfony2マッピングされていないコレクション型が動作しない
名前、コンテンツ、およびタイプの属性を持つファイルエンティティのおかげで、ファイルのコンテンツをデータベースに格納していることに注意してください。 しかし、それを機能させるために、私はこのエンティティにフォームをマッピングしていません。
だから、私のコントローラは次のようになります。
$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のおかげでフィールドを追加/削除することができます。 (コードはドキュメントのものとほぼ同じですが、私はEntitiesで作業していないので、ここでは示しません)。
最初に単一ファイルのアップロードを試みましたがうまくいきました。そして、上記のコードを試みました。コレクションタイプと$ファイル配列を使用してフォームからコントローラにデータを取得しましたが、 :
フォームを送信すると、明らかに最初のファイルの後のファイルの値が無効になります。
私は1つのファイルのみを提出すると(検証エラーなし)、コントローラーのダンプ($ファイル)は空の配列を表示します。
何か助けていただければ幸いです。必要と思われる場合は、もっと欲しいと思ってください。
ありがとうございました!
ました。コントローラの$ files配列が空であるのはなぜですか? 私はいくつかのjavascriptでこれらの名前を変更して "_form"を追加するべきですか? また、自分の現在の状態でAddFileTypeが役に立たないことを認識していますが、代わりにFileTypeを使用すると間違いを起こすことはありません。/ – abernard
$データが空である可能性があります。理由はありますが、これは良いようです。 AddFileTypeは、予想されるデータ配列にネスティングのレベルを追加するため、間違いを招く可能性があります。 AddFileTypeでは、 "multiple_files_form [ファイル] [INDEX] [ファイル]" – Terenoth
と入力を提出する必要がありますので、私はこの変更を行いました。私の名前が '' multiple_files_form [files] [INDEX] ''であるときは、どちらもうまくいきません。フォームを送信すると、コントローラは 'if($ form-> isSubmitted()&& $ form-> isValid())'状態になりません。 – abernard