1つのコントローラで2つのフォームを使用しようとしています。それぞれは異なるエンティティを使用します。 2番目のフォームを使用しようとするたびに、最初のフォームが実行されます。それを正しくするには?Symfony3の1つのコントローラに複数のフォームがあります
$document = new Document();
$form2 = $this->createFormBuilder($document)
->add('file', FileType::class, array('label' => 'Wgraj plik '))
->add('name', TextType::class, array('label' => 'Nazwa dodawanego pliku'))
->add('toFill', CheckboxType::class, array('label' => 'Do wypełnienia?', 'required' => false))
->add('save', SubmitType::class, array('label' => 'Dodaj plik'))
->getForm();
if ($form2->handleRequest($request)->isValid() && $form2->isSubmitted()) {
$em = $this->getDoctrine()->getManager();
$document->upload();
$document->setFormId($id);
$em->persist($document);
$em->flush();
}
$raportFiles = new RaportFiles();
$formRaportsInput = $this->createFormBuilder($raportFiles)
->add('file', FileType::class, array('label' => 'Wgraj plik '))
->add('name', TextType::class, array('label' => 'Nazwa dodawanego pliku'))
->add('save', SubmitType::class, array('label' => 'Dodaj plik'))
->getForm();
if ($formRaportsInput->handleRequest($request)->isValid()) {
$em = $this->getDoctrine()->getManager();
$raportFiles->upload();
$raportFiles->setFormId($id);
$em->persist($raportFiles);
$em->flush();
}
私の代わりに$this->get('form.factory')->createNamedBuilder()
を使用してみましたが、私はそれを動作させることはできません。
基本に戻る。あなたのブラウザは一度に1つのフォームしか提出しないので、1つのアクションで2つ以上のフォームを処理しようとすると乱雑になることがあります。あなたの最善の策はおそらく各フォームのための個々のPOSTアクションを作ることです。 – Cerad
@セラード、彼は両方のフォームを一度に提出するのではなく、それらのうちの1つだけを提出することを望んでいます。問題は、彼のコードは、常に最初のフォームが提出されたと考えているということです。 –
@dragoste、まさに。彼のコードには2つの形式を区別するものは何もありません。アクションメソッドを2つの異なるメソッドに設定すると、問題が解決されます。 – Cerad