Symfony : comment créer un formulaire avec Symfony 5 ?

Symfony est un framework PHP de développement web très utilisé par les entreprises et les développeurs grâce à sa flexibilité, sa robustesse et sa facilité d’utilisation. L’une des fonctionnalités principales de Symfony est la création de formulaires. Dans cet article, nous allons vous expliquer comment créer un formulaire avec Symfony 5.

Prérequis pour créer un formulaire Symfony 5

Pour pouvoir créer un formulaire avec Symfony 5, vous devez préalablement avoir installé Symfony 5 sur votre ordinateur. Si ce n’est pas le cas, vous pouvez suivre les instructions présentes sur le site officiel de Symfony. Vous devrez également avoir des connaissances en PHP et HTML/CSS ainsi qu’en programmation orientée objet.

Il est également important de noter que Symfony 5 utilise une structure MVC (Modèle-Vue-Contrôleur) pour organiser son code. Cela signifie que vous devrez comprendre les principes de base de cette structure pour pouvoir créer et utiliser des formulaires avec Symfony 5.

Une fois ces prérequis remplis, vous êtes prêt à créer votre premier formulaire Symfony 5 !

Créer un formulaire Symfony 5

Pour créer un formulaire avec Symfony 5, vous devez tout d’abord créer une classe de formulaire. Cette classe doit étendre la classe « AbstractType » de Symfony 5 et doit définir les champs du formulaire ainsi que les options qui leur sont associées.

Par exemple, si vous voulez créer un formulaire de contact avec un champ « nom », un champ « email » et un champ « message », vous pouvez créer une classe « ContactFormType » qui ressemblerait à cela :

namespace AppForm;

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeEmailType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeTextareaType;
use SymfonyComponentFormFormBuilderInterface;

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

Cette classe définit un formulaire de contact avec trois champs : « nom » (de type TextType), « email » (de type EmailType) et « message » (de type TextareaType). Vous pouvez ajouter d’autres champs en utilisant les différentes options proposées par Symfony 5.

Afficher un formulaire Symfony 5 dans une vue

Une fois que vous avez créé votre classe de formulaire, vous devez ensuite l’afficher dans une vue (ou template) pour permettre à l’utilisateur de remplir le formulaire. Pour cela, vous pouvez utiliser la fonction « form() » de Symfony 5 qui va afficher automatiquement le formulaire à partir de la classe que vous avez définie précédemment.

Par exemple, si vous voulez afficher le formulaire de contact dans une vue « contact.html.twig », vous pouvez ajouter le code suivant :

{% extends 'base.html.twig' %}

{% block content %}
    {{ form_start(form) }}
        {{ form_row(form.nom) }}
        {{ form_row(form.email) }}
        {{ form_row(form.message) }}
        {{ form_widget(form) }}
    {{ form_end(form) }}
{% endblock %}

Ce code va afficher le formulaire de contact avec les trois champs « nom », « email » et « message ». Vous pouvez personnaliser l’affichage du formulaire en utilisant les différentes fonctions de « form() » comme « form_start() », « form_row() », « form_widget() » et « form_end() ».

Récupérer les données d’un formulaire Symfony 5

Une fois que l’utilisateur a rempli le formulaire, vous devez récupérer les données pour pouvoir les traiter dans votre application. Pour cela, vous pouvez utiliser la fonction « handleRequest() » de Symfony 5 qui va automatiser la récupération des données.

Par exemple, si vous voulez récupérer les données du formulaire de contact, vous pouvez ajouter le code suivant à votre contrôleur :

$form = $this->createForm(ContactFormType::class);
$form->handleRequest($request);

if ($form->isSubmitted() && $form->isValid()) {
    $data = $form->getData();

    // Traitement des données
}

Ce code va créer une instance de la classe « ContactFormType », récupérer les données du formulaire à partir de la requête HTTP et stocker ces données dans la variable « $data ». Vous pouvez ensuite traiter ces données comme bon vous semble (par exemple, en les enregistrant dans une base de données).

Validation des données d’un formulaire Symfony 5

Enfin, il est important de valider les données que l’utilisateur a saisies dans le formulaire pour éviter les erreurs et les attaques malveillantes. Symfony 5 propose plusieurs fonctions de validation de données que vous pouvez utiliser pour vérifier que les données sont correctes.

Par exemple, si vous voulez valider que l’email saisi par l’utilisateur est bien un email valide, vous pouvez ajouter la contrainte « Email » à votre champ « email » dans la classe « ContactFormType ». Le code ressemblerait alors à cela :

use SymfonyComponentValidatorConstraintsEmail;

class ContactFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nom', TextType::class)
            ->add('email', EmailType::class, [
                'constraints' => [
                    new Email(['message' => 'Veuillez saisir un email valide.'])
                ]
            ])
            ->add('message', TextareaType::class);
    }
}

Ce code va ajouter la contrainte « Email » au champ « email » du formulaire et afficher un message d’erreur si l’utilisateur saisit un email invalide.

Créer un formulaire avec Symfony 5 peut sembler complexe au premier abord, mais une fois que vous avez compris les concepts de base, cela devient très facile. En suivant les étapes décrites dans cet article, vous pourrez créer des formulaires efficaces et sécurisés pour votre application Symfony 5.

N’oubliez pas que Symfony 5 propose de nombreuses autres fonctionnalités pour simplifier le développement web, comme le routage, la gestion des sessions et des cookies, la sécurité, etc. Nous vous encourageons à explorer toutes ces fonctionnalités pour aller encore plus loin dans votre développement web avec Symfony 5.