Symfony2: dos formas en una misma página [php]
Esto funcionó para mí en Symfony 3 (también debería funcionar para Symfony 2):
$form1 = $this->createForm(
MyFirstFormType::class
);
$form2 = $this->createForm(
MySecondFormType::class
);
if ($request->isMethod('POST')) {
$form1->handleRequest($request);
$form2->handleRequest($request);
if ($form1->isSubmitted()) {
// Handle $form1
} else if ($form2->isSubmitted()) {
// Handle $form2
}
}
Tengo dos formularios en la misma página.
Mi problema es que cuando intenté enviar un formulario, es como si intentara enviar el segundo formulario a continuación en la página también.
Como sigue, puedes encontrar mis 2 formularios:
public function createSuiviForm() {
return $form = $this->createFormBuilder(null)
->add('numero', 'text', array('label' => 'N° : ',
'constraints' => array(
new Assert\NotBlank(array('message' => 'XXXX')),
new Assert\Length(array('min' => 19, 'max' => 19, 'exactMessage' => 'XXX {{ limit }} XXX')))))
->add('xxxx', 'submit')
->getForm();
}
public function createModificationForm() {
return $form = $this->createFormBuilder(null)
->add('modification', 'submit', array('label' => 'XXXXXXXXXXXXXXXXXXXX'))
->getForm();
}
Mi segunda forma como solo un botón de enviar.
Los pasé a mi render y los mostré usando:
<div class="well">
<form method="post" action='' {{form_enctype(form)}} >
{{ form_widget(form) }}
<input type="submit" class="btn btn-primary"/>
</form>
<div class='errors'>
{{ form_errors(form) }}
</div>
</div>
'formulario' es el nombre de mi variable para la primera forma y 'actualización' para mi segunda forma.
Cuando intenté enviar mi segundo formulario, necesito hacer clic dos veces y finalmente obtener:
"This form should not contain extra fields."
And all non valid input for the remainding form.
Traté de agregar validation_group a falso, pero fue en vano.
No entiendo por qué recibí este error porque mis formularios no están incrustados en absoluto
Espero que entiendas...
Los dos formularios serán publicados.
Intenta usar:
$this->createNamedBuilder
en lugar de
$this->createFormBuilder
Luego, en su controlador, ubique el formulario por nombre:
if ($request->request->has("your form name") {
$form->handleRequest($request);
}
Así es como los manejo en mi controlador:
return $this->render('SgaDemandeBundle:Demande:suivi_avancement.html.twig',
array('form' => $form->createView(),
........
'update' => $formModification->createView()));
Este es el html para la segunda forma:
<div class="well">
<form method="post">
<div id="form">
<div>
<button type="submit" id="form_modification"
name="form[modification]">Modification done
</button>
</div>
<input type="hidden" id="form__token" name="form[_token]"
value="fFjgI4ecd1-W70ehmLHmGH7ZmNEHAMqXlY1WrPICtK4">
</div>
</form>
</div>
Esta es mi ramita rendida:
<div class="well">
<form method="post" {{form_enctype(update)}} >
{{ form_widget(update) }}
</form>
</div>
<div class="well">
<form method="post" action='' {{form_enctype(form)}} >
{{ form_widget(form) }}
<input type="submit" class="btn btn-primary"/>
</form>
<div class='errors'>
{{ form_errors(form) }}
</div>
</div>
Espero que esto ayude.