Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:symfony:entities:fixtures [04/10/2022 16:09]
thierry [Sources & Ressources]
prog:symfony:entities:fixtures [09/10/2022 17:24] (Version actuelle)
thierry [Créer un mot de passe d'utilisateur]
Ligne 2: Ligne 2:
 ===== Prérequis ===== ===== Prérequis =====
 ''​symfony composer req orm-fixtures --dev''​ ''​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 =====
 +<code 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();​
 +    }
 +}
 +
 +</​code>​
 +
 +===== 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 injecter ''​userPasswordHasherInterface''​
 +  - Hashage du mot de passe avec ''​$this->​userPasswordHasherInterface->​hashPassword($user,'​password'​);''​
 +
 +
 +<code php>
 +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();​
 +    }
 +}
 +
 +</​code>​
 +
 +
 +
  
 ====== Sources & Ressources ====== ====== Sources & Ressources ======