Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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:12] thierry [Prérequis] |
prog:symfony:entities:fixtures [09/10/2022 17:24] (Version actuelle) thierry [Créer un mot de passe d'utilisateur] |
||
|---|---|---|---|
| Ligne 6: | Ligne 6: | ||
| * crée un répertoire : ''/src/DataFixtures'' | * crée un répertoire : ''/src/DataFixtures'' | ||
| * Crée un fichier ''AppFixtures.php'' dans le répertoire ci-dessus. | * 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 ====== | ||