Préremplir votre base de données avec des données fictifs peut s’avérer très utile pour les tests, mais aussi pour aider les nouveaux membres de l’équipe à se familiariser avec l’environnement.

Dans ce tutoriel, nous allons créer plusieurs comptes utilisateur avec des mots de passe Hautelook Alice bundle. Ainsi, vous aurez un début pour comprendre ce bundle.

Les étapes détaillées ci-dessous incluent les commandes nécessaires et des captures d’écran afin de faciliter la compréhension.

Prérequis

Tout d’abord, assurez-vous d’avoir :

  • Symfony installé et configuré.
  • Une base de données connectée à votre projet Symfony.

Étape 1 : Créer l’Entité User

D’abord, Créons une entité utilisateur dans Symfony pour gérer les données.

php bin/console make:user

Ensuite Confirmez toutes les options proposées jusqu’à la fin de la création de l’entité. Ensuite, nous allons ajouter des champs pour le prénom (firstName) et le nom (lastName).

php bin/console make:entity User

Puisque l’entité User existe déjà, cette commande permet d’ajouter de nouvelles propriétés.

php bin/console make:migration

Si la base de données est correctement configurée, la migration se déroulera avec succès. Sinon, vérifiez la configuration de la connexion dans .env

php bin/console doctrine:migrations:migrate

Et Enfin, Vérifiez dans votre outil de gestion de base de données que la table User est bien créée.

Étape 2 : Installer Alice Bundle pour les Fixtures

Premièrement: pour générer les données, nous utiliserons Alice Bundle. Suivez aussi la documentation officielle pour l’installation : Alice Bundle Documentation.

composer require --dev hautelook/alice-bundle

Ensuite, Un dossier /fixtures est créé.

Créer le fichier User.yaml

Ensuite, Dans le dossier /fixtures, créez un fichier User.yaml avec le contenu suivant pour générer des utilisateurs de test.

App\\Entity\\User:
  user_{3..10}:
    email: <email()>
    firstName: <firstName()>
    lastName: <lastName()>
    password: "test"
  user_1:
    email: '[email protected]'
    password: "test"
  user_2:
    email: '[email protected]'
    password: "test"

  • Le mot de passe est ici en clair pour l’instant, nous verrons plus loin comment le hacher correctement.
  • Les noms de clés doivent correspondre aux properties de l’entité.
  • La notation user_{3..10} crée des utilisateurs de user_3 à user_10.
email: <email()>
  • Et enfin, utilisez cette syntaxe pour générer des adresses e-mail aléatoires.

Charger les Fixtures

Et enfin, Pour charger ces données dans la base de données, utilisez la commande suivante :

php bin/console hautelook:fixtures:load
Screenshot

Étape 3 : Hachage des Mots de Passe avec Provider de Hautelook Alice

Puisque nous allons hacher les mots de passe dans les fixtures. Créons un provider pour cela.

Créer le Fichier HashPasswordProvider.php

D’abord, dans src/DataFixtures/Providers/, créez le fichier HashPasswordProvider.php avec le code suivant :

php
Copier le code
<?php

namespace App\\DataFixtures\\Providers;

use App\\Entity\\User;
use Symfony\\Component\\PasswordHasher\\Hasher\\UserPasswordHasherInterface;

class HashPasswordProvider
{
    private $encoder;

    public function __construct(UserPasswordHasherInterface $encoder)
    {
        $this->encoder = $encoder;
    }

    public function hashPassword(string $plainPassword): string
    {
        return $this->encoder->hashPassword(new User(), $plainPassword);
    }
}

On fait juste appel à l’interface UserPasswordHasherInterface de Symfony afin de haché un mot de passe.

Configurer le Service dans services.yaml

Ensuite, ajoutez ce provider dans config/services.yaml.
Afin de nous permettre d’utiliser le hashPassword() dans nos fichiers fixtures.

yaml
Copier le code
services:
    App\\DataFixtures\\Providers\\HashPasswordProvider:
        tags: [ { name: nelmio_alice.faker.provider } ]

Modifier les Fixtures pour Utiliser le Hachage

Puis, dans User.yaml, remplacez le champ password par :

yaml
Copier le code
App\\Entity\\User:
  user_{3..10}:
    email: <email()>
    firstName: <firstName()>
    lastName: <lastName()>
    password: <hashPassword('test')>
  user_1:
    email: '[email protected]'
    password: <hashPassword('test')>
  user_2:
    email: '[email protected]'
    password: <hashPassword('test')>

Et enfin, pour terminer, Rechargez les fixtures avec la commande suivante :


php bin/console hautelook:fixtures:load
Screenshot

Evidemment, Vous pouvez facilement ajuster le nombre d’utilisateurs en modifiant la plage {3..10} dans user_{3..10} afin de générer plus d’utilisateurs.


Pour conclure, Hautelook Alice Bundle est un outil puissant qui permet de créer rapidement un grand nombre de données de test, avec des valeurs variées et adaptées à chaque besoin.
En effet, il nous donne déjà les fonctionnalités pour générer des données aléatoirement, on peut également, créer des fonctionnalités un peu plus custom.

Je suis Pascal Yu, je vous aide à développer vos solutions à l’aide de Symfony.

Prend un rendez vous gratuitement avec moi pour savoir comment je peux vous aider.