[Php] Symfony2: dos formas en una misma página


Answers

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
    }

}
Question

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...




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.




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);
}



Links