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 :
- Nouvelle clause use :
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
- Modification/Ajout de la function
construct
pour injecteruserPasswordHasherInterface
- 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é.