Utilisation de Faker pour saisir des données initiales dans la BD

Nous voudrions générer des données initiales automatiquement pour notre bibliothèque de Livres et Auteurs. Nous allons pour celà utiliser le Bundle Faker

Installation de DoctrineFixturesBundle

composer req --dev make doctrine/doctrine-fixtures-bundle

Ceci crée dans le dossier src un dossier DataFixtures contenant un fichier à compléter AppFixtures.php. On peut utiliser DoctrineFixturesBundle sans Faker mais pas aussi convivial !

Voir la doc correspondante

Installation de Faker

Le Bundle Faker est spécialisé dans la génération de données aléatoires vraisemblables de tous types (chaines, noms, adresses, lorem, nombres, dates, etc.) avec localisation.

Nous l’installons avec :

composer require --dev fzaninotto/faker

Complétons AppFixtures.php

Nous allons maintenant compléter le fichier AppFixtures.php pour qu’il crée automatiquement un ensemble de données initiales de Livres et d’Auteurs.

<?php

  namespace App\DataFixtures;

  use App\Entity\Livre;
  use App\Entity\Auteur;

  use Doctrine\Bundle\FixturesBundle\Fixture;
  use Doctrine\Common\Persistence\ObjectManager;
  use Faker;

 class AppFixtures extends Fixture
 {
     public function load(ObjectManager $manager)
      {
       $faker = Faker\Factory::create('fr_FR');
           // on crée 4 auteurs avec noms et prénoms "aléatoires" en français
           $auteurs = Array();
           for ($i = 0; $i < 4; $i++) {
               $auteurs[$i] = new Auteur();
               $auteurs[$i]->setNom($faker->lastName);
               $auteurs[$i]->setPrenom($faker->firstName);

               $manager->persist($auteurs[$i]);
           }
       // nouvelle boucle pour créer des livres

       $livres = Array();

       for ($i = 0; $i < 12; $i++) {
               $livres[$i] = new Livre();
               $livres[$i]->setTitre($faker->sentence($nbWords = 6, $variableNbWords = true));
               $livres[$i]->setAnnee($faker->numberBetween($min = 1900, $max = 2020));
               $livres[$i]->setAuteur($auteurs[$i % 3]);

               $manager->persist($livres[$i]);
           }

           $manager->flush();
       }
   }

Chargeons les fixtures

php bin/console doctrine:fixtures:load

Testons :

_images/screenshot-livre-index.png