Outils pour utilisateurs

Outils du site


symfony4:formulaires_formulaire_avec_bouton_annuler

Formulaire avec bouton Annuler

Formulaire

Un formulaire d'édition d'article avec deux boutons : Enregistrer et Annuler.

IMPORTANT Le bouton “Annuler” a l'attribut formnovalidate afin que le navigateur ne tente pas de valider un formulaire non rempli.
ArticleType.php
class ArticleTpe extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('reference', StringType::class)
            ->add('denomination', StringType::class)
            ->add('couleur', StringType::class)
 
            // Bouton "Enregistrer"
            ->add('save', SubmitType::class, [
                'label' => 'Enregistrer',
                'attr' => [
                    'class' => 'btn btn-primary'
                ]
            ])
 
            // Bouton "Annuler"
            ->add('cancel', SubmitType::class, [
                'label' => 'Annuler',
                'attr' => [
                    'class'          => 'btn btn-secondary'
                    'formnovalidate' => 'formnovalidate'
                ]
            ])
        ;
    ]
}

Template

edit.html.twig
{{ form_start(form) }}
 
{{ form_row(form.reference) }}
{{ form_row(form.denomination) }}
{{ form_row(form.couleur) }}
 
{{ form_widget(form.save) }}
{{ form_widget(form.cancel) }}
 
{{ form_end(form) }}

Contrôleur

Dans le formulaire, agir de façon différente selon le bouton qui a été cliqué :

ArticleController.php
// Le formulaire a-t-il été soumis ?
if($form->isSubmitted()) {
 
    // L'utilisateur a-t-il cliqué sur "Enregistrer" ?
    if($form->get('save')->isClicked()) {
 
        // Les données du formulaire sont-elles valides ?
        if($form->isValid()) {
 
            // On enregistre l'article
            $manager->persist($article);
            $manager->flush();
 
            // ENREGISTREMENT EFFECTUÉ
            // On redirige vers la liste d'articles
            return $this->redirectToRoute('liste_articles');
        }
    }
 
    // L'utilisateur a-t-il cliqué sur "Annuler" ?
    else {
 
        // ENREGISTREMENT ANNULÉ
        // On redirige vers la liste d'articles
        return $this->redirectToRoute('liste_articles');
 
    }
}
 
// FORMULAIRE PAS ENCORE SOUMIS
// On affiche simplement la vue contenant le formulaire
return $this->render(edit.html.twig', [
    'form' => $form->createView()
]);
symfony4/formulaires_formulaire_avec_bouton_annuler.txt · Dernière modification: 2020/04/10 18:37 (modification externe)