×

Créer et gérer un formulaire de connexion et d’inscription avec Symfony Framework

Créer et gérer un formulaire de connexion et d’inscription avec Symfony Framework

Dans ce tutoriel, on va créer et gérer un formulaire de connexion et d’inscription en HTML/CSS avec Symfony. On utilisera le Framework Symfony pour la gestion des formulaires, de la validation et de la logique côté serveur.

Étape 1 : Installation de Symfony

Si vous n’avez pas encore Symfony installé, vous pouvez le faire en suivant les instructions sur le site officiel de Symfony : https://symfony.com/download

Étape 2 : Création d’un nouveau projet Symfony

Utilisez la commande Symfony pour créer un nouveau projet :

symfony new nom_de_votre_projet

Étape 3 : Création d’une entité User

Dans Symfony, les utilisateurs sont généralement gérés en utilisant la sécurité et le composant FOSUserBundle. Vous pouvez créer une entité User avec la commande suivante :

php bin/console make:user

Suivez les instructions pour configurer votre entité User. Assurez-vous d’inclure un champ password pour stocker le mot de passe de l’utilisateur.

Étape 4 : Création d’un formulaire Symfony

Utilisez la commande Symfony pour créer un formulaire de connexion et d’inscription :

php bin/console make:form

Suivez les instructions pour créer un formulaire de connexion et un formulaire d’inscription. Vous devrez également créer un modèle (Entity) associé à ces formulaires. Par exemple, LoginForm et RegistrationForm avec leurs modèles respectifs.

Étape 5 : Personnalisation des formulaires

Ouvrez les fichiers générés dans src/Form et personnalisez-les en ajoutant les champs nécessaires tels que email, password, nom, prenom, etc. Définissez les contraintes de validation selon vos besoins.

// src/Form/LoginFormType.php
// src/Form/RegistrationFormType.php
use Symfony\Component\Validator\Constraints as Assert;

// ...

class LoginFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('email', EmailType::class, [
                'constraints' => [
                    new Assert\NotBlank(),
                    new Assert\Email(),
                ],
            ])
            ->add('password', PasswordType::class, [
                'constraints' => [
                    new Assert\NotBlank(),
                ],
            ]);
    }
}

class RegistrationFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('email', EmailType::class, [
                'constraints' => [
                    new Assert\NotBlank(),
                    new Assert\Email(),
                ],
            ])
            ->add('plainPassword', PasswordType::class, [
                'constraints' => [
                    new Assert\NotBlank(),
                ],
            ])
            ->add('nom')
            ->add('prenom');
    }
}

Étape 6 : Création des vues Twig

Créez des vues Twig pour afficher les formulaires de connexion et d’inscription. Ces vues seront généralement situées dans templates/security.

login.html.twig

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

{% block body %}
    <h2>Connexion</h2>
    {{ form_start(form) }}
    {{ form_widget(form) }}
    <button type="submit" class="btn btn-primary">Se connecter</button>
    {{ form_end(form) }}
{% endblock %}

registration.html.twig

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

{% block body %}
    <h2>Inscription</h2>
    {{ form_start(form) }}
    {{ form_widget(form) }}
    <button type="submit" class="btn btn-primary">S'inscrire</button>
    {{ form_end(form) }}
{% endblock %}

Étape 7 : Configuration de la sécurité

Dans config/packages/security.yaml, configurez la sécurité pour utiliser le formulaire de connexion :

security:
    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

    firewalls:
        main:
            pattern: ^/
            form_login:
                login_path: app_login
                check_path: app_login
                default_target_path: app_home
            logout:
                path: app_logout
                target: app_login
            anonymous: true

Étape 8 : Création des routes

Définissez les routes pour les pages de connexion et d’inscription dans config/routes.yaml :

app_login:
    path: /login
    controller: App\Controller\SecurityController::login

app_logout:
    path: /logout

app_register:
    path: /register
    controller: App\Controller\SecurityController::register

Étape 9 : Création des contrôleurs

Créez les contrôleurs SecurityController.php pour gérer les actions de connexion et d’inscription.

SecurityController.php

// src/Controller/SecurityController.php
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="app_login")
     */
    public function login(AuthenticationUtils $authenticationUtils)
    {
        $error = $authenticationUtils->getLastAuthenticationError();
        $lastUsername = $authenticationUtils->getLastUsername();

        return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername,
            'error' => $error,
        ]);
    }

    /**
     * @Route("/register", name="app_register")
     */
    public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder)
    {
        $user = new User();
        $form = $this->createForm(RegistrationFormType::class, $user);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // Encode the plain password
            $password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
            $user->setPassword($password);

            // Save the user
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();

            // Redirect to login page
            return $this->redirectToRoute('app_login');
        }

        return $this->render('security/registration.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

Étape 10 : Création d’une page d’accueil

Créez une page d’accueil (templates/home.html.twig) où les utilisateurs peuvent être redirigés après la connexion.

home.html.twig

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

{% block body %}
    <h2>Bienvenue

 sur notre site !</h2>
    {# Ajoutez ici le contenu de la page d'accueil après la connexion #}
{% endblock %}

Étape 11 : Création de la base de données et de la table User

Exécutez les migrations pour créer la base de données et la table User en utilisant la commande Symfony:

php bin/console doctrine:migrations:migrate

Étape 12 : Exécution de l’application

Exécutez votre application Symfony en utilisant le serveur de développement interne :

symfony server:start

Vous pouvez maintenant accéder à votre application dans votre navigateur à l’adresse http://localhost:8000.

Voilà, vous avez créé un formulaire de connexion et d’inscription en utilisant Symfony. N’oubliez pas de personnaliser davantage l’interface utilisateur et d’ajouter des fonctionnalités supplémentaires selon vos besoins spécifiques.

109 commentaires