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 :
