Fixtures

Prérequis

symfony composer req orm-fixtures –dev

Cette commande, entre autre :

  • crée un répertoire : /src/DataFixtures
  • Crée un fichier AppFixtures.php dans le répertoire ci-dessus.

Si on utilise Faker pour générer des données aléatoires, il faut l'installer aussi :
symfony composer req fzaninotto/faker –dev

Faker

Pour voir les differents formats généré par Faker, rdv ici → https://fakerphp.github.io/formatters/numbers-and-strings/

AppFixtures.php

AppFixtures.php
<?php
 
namespace App\DataFixtures;
 
use Faker\Factory;
use App\Entity\GTicket;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
 
class AppFixtures extends Fixture
{
    const NB_TICKETS = 20000;
 
    public function load(ObjectManager $manager): void
    {
 
        $faker = Factory::create('fr_FR');
        for ($i=0;$i<self::NB_TICKETS;$i++)
        {
            $ticket=new GTicket(null);
            $ticket->setNum($faker->randomNumber(4,false));
            $ticket->setMail($faker->email());
            $ticket->setDate($faker->dateTimeBetween('-1 week', '+4 week'));
            $ticket->setIp($faker->ipv4());
            $manager->persist($ticket);
        }
        $manager->flush();
    }
}

Application des fixtures

symfony console doctrine:fixtures:load

Cas particuliers

Créer un mot de passe d'utilisateur

Il faut hasher le mot de passe avant de le stocker avec $user→setPassword

Dans l'exemple ci dessous :

  1. Nouvelle clause use :use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  2. Modification/Ajout de la function construct pour injecter userPasswordHasherInterface
  3. Hashage du mot de passe avec $this→userPasswordHasherInterface→hashPassword($user,'password');
use App\Entity\User;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
 
class AppFixtures extends Fixture
{
    private $userPasswordHasherInterface;
    public function __construct (UserPasswordHasherInterface $userPasswordHasherInterface) 
    {
        $this->userPasswordHasherInterface = $userPasswordHasherInterface;
    }
 
    public function load(ObjectManager $manager): void
    {
        $user = new User;
        $user->setEmail('test@test.com');
        $hashedPassword = $this->userPasswordHasherInterface->hashPassword($user,'password');
        $user->setPassword($hashedPassword);
        $manager->persist($user);
        $manager->flush();
    }
}

Sources & Ressources

Vous pourriez laisser un commentaire si vous étiez connecté.