Skip to main content

Utilisation des Formulaires avec Symfony 6

Ce guide explique comment créer, afficher et traiter un formulaire simple avec Symfony 6. Il s'adresse aux débutants souhaitant comprendre les bases du composant Form.

Pré-requis

  • Avoir un projet Symfony 6 installé.
  • Connaissances de base en PHP et Symfony.

Étape 1 : Créer une entité

Commencez par créer une entité, par exemple Contact.

#[ORM\Entity]
class Contact
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private $id;

#[ORM\Column(length: 255)]
private $name;

#[ORM\Column(length: 255)]
private $email;

#[ORM\Column(type: 'text')]
private $message;

// getters et setters
}

Étape 2 : Créer une classe de formulaire

Générer le formulaire le php

php bin/console make:form

Le code sur formulaire généré ressemble à :

class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TextType::class)
->add('email', EmailType::class)
->add('message', TextareaType::class);
}

public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Contact::class,
]);
}
}

On peut enlever dans le builder les champs à ne pas afficher le front:

  • Exemple : une date de création ou modification

Étape 3 : Utiliser le formulaire dans un contrôleur

class ContactController extends AbstractController
{
#[Route('/contact', name: 'contact')]
public function index(Request $request, EntityManagerInterface $em): Response
{
$contact = new Contact();
$form = $this->createForm(ContactType::class, $contact);

$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
// Enregistrer ou traiter les données
// $em->persist($contact);
// $em->flush();

// Message temporaire success
$this->addFlash('success', 'Message envoyé !');

// Rédiriger
return $this->redirectToRoute('contact');
}

return $this->render('contact/index.html.twig', [
'form' => $form->createView(),
]);
}
}
Flash Message

A vous de le designer de votre base.html.twig par exemple

{#  Pour chaque type de message temporaire (ex: [success, [messages]] #}
{% for label, messages in app.flashes %}
{# Pour chaque message j'affiche une alert. ex: [Virement effectué, Connecté] #}
{% for message in messages %}
<div class="uk-alert-{{ label }}" uk-alert>
<a href class="uk-alert-close" uk-close></a>
<p>{{ message }}</p>
</div>
{% endfor %}
{% endfor %}

Étape 4 : Créer le template Twig

La moins découpé :

{# Ouvrir le formulaire #}
{{ form_start(form) }}

{# Afficher tout les champs #}
{{ form_widget(form) }}

<button type="submit">Envoyer</button>

{# Fermer le formulaire #}
{{ form_end(form) }}

Découpé :

{# templates/contact/index.html.twig #}
{% extends 'base.html.twig' %}

{% block title %}Contact{% endblock %}

{% block body %}
<h1>Contactez-nous</h1>

{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.email) }}
{{ form_row(form.message) }}
<button type="submit">Envoyer</button>
{{ form_end(form) }}
{% endblock %}

Conclusion

Vous avez maintenant un formulaire fonctionnel avec Symfony 6. Ce guide couvre les bases :

  • Création d'entité
  • Création de formulaire
  • Traitement dans un contrôleur
  • Affichage avec Twig