[php] Symfony2: deux formulaires dans une même page


Answers

Cela a fait l'affaire pour moi dans Symfony 3 (devrait aussi fonctionner pour 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

J'ai deux formulaires dans une même page.

Mon problème est quand j'ai essayé de soumettre un formulaire, c'est comme s'il essayait de soumettre le deuxième formulaire ci-dessous dans la page.

Comme suit, vous pouvez trouver mes 2 formulaires:

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

Ma deuxième forme comme seulement un bouton de soumission.

Je les ai passés à mon rendu et les ai montrés en utilisant:

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

'form' est le nom de ma variable au premier formulaire et 'mise à jour' pour mon deuxième formulaire.

Quand j'ai essayé de soumettre mon deuxième formulaire, j'ai besoin de cliquer deux fois et finalement j'ai:

"This form should not contain extra fields."
And all non valid input for the remainding form.

J'ai essayé d'ajouter validation_group à false mais en vain.

Je ne comprends pas pourquoi j'ai eu cette erreur parce que mes formulaires ne sont pas du tout intégrés

J'espère que vous comprendrez...




Les deux formulaires seront affichés.

Essayez d'utiliser:

    $this->createNamedBuilder 

au lieu de

    $this->createFormBuilder

Ensuite, dans votre contrôleur, recherchez le formulaire par son nom:

if ($request->request->has("your form name") {
   $form->handleRequest($request);
}



Voici comment je les gère sur mon contrôleur:

return $this->render('SgaDemandeBundle:Demande:suivi_avancement.html.twig', 
                     array('form' => $form->createView(), 
                           ........
                           'update' => $formModification->createView()));

C'est le html pour la seconde forme:

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

C'est ma brindille rendue:

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

J'espère que cela t'aidera.






Links