한 컨트롤러에서 두 개의 폼을 사용하려고합니다. 각각은 다른 엔티티를 사용합니다. 매번 두 번째 양식을 사용하려고 할 때마다 첫 번째 양식이 실행됩니다. 그것을 올바르게 만드는 방법?Symfony3의 한 컨트롤러에 여러 폼이 있습니다.
$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()
을 사용해 보았지만 제대로 작동하지 않습니다.
로 돌아 가기. 브라우저는 한 번에 하나의 양식 만 제출하므로 하나 이상의 작업을 두 개 이상의 양식으로 처리하려고하면 지저분해질 수 있습니다. 최선의 방법은 각 폼에 대해 개별 POST 작업을 만드는 것입니다. – Cerad
@Cerad, 그는 한 번에 두 가지 양식을 모두 제출하고 싶지 않지만 한 가지 양식 만 제출할 수 있습니다. 문제는 그의 코드가 항상 첫 번째 양식이 제출된다고 생각한다는 것입니다. –
@dragoste, 맞아. 코드에서 두 형식을 구분할 수있는 것은 없습니다. 조치 메소드를 두 가지 다른 메소드로 설정하면 문제점이 사라집니다. – Cerad