Accueil » Symfony 6 Fixtures

Symfony 6 Fixtures

Les Fixtures dans Symfony 6 permettent d’avoir rapidement des données de test pendant le développement d’une application Symfony. C’est données que nous allons générées seront de fausses données créer à l’aide de Faker ainsi nous pourront rapidement avoir de fausses données pour l’application.

Logo Symfony

Prérequis :

Utilisation des Fixtures avec Symfony 6 :

Avant de commencer à utiliser les Fixtures dans Symfony 6, nous allons d’abord créer une nouvelle application avec une entité Article qui va nous permettre d’utiliser les Fixtures.

Création du nouveau projet :

Pour créer un nouveau projet Symfony 6, nous allons exécuter la commande suivant :

symfony new projet_fixtures --webapp

Ensuite on va pouvoir se rendre dans le dossier de nôtre nouveau projet :

cd projet_fixtures

Puis ensuite nous allons pouvoir modifier le fichier .env afin de connecter l’ORM Doctrine à notre base de données :

DATABASE_URL="mysql://nom_utilisateur:mot_de_passe@127.0.0.1:3306/nom_bdd?serverVersion=version_mariadb&charset=utf8mb4"
avec mes valeurs
DATABASE_URL="mysql://symfony:password@127.0.0.1:3306/projet_fixtures?serverVersion=mariadb-10.5.15&charset=utf8mb4"

Une fois connecté à la base de données, depuis la CLI Symfony, nous pouvons créer la base de données :

symfony console d:d:c

Création de l’entité Article :

Pour créer l’entité article, si vous avez besoin de plus de détails, je vous invite à suivre cette procédure : Symfony 6 Créer une entité

Pour créer l’entité Article nous allons saisir la commande suivant :

symfony console make:entity Article

# ou avec l'alias suivant : 

symfony console m:e Article

Article(id, date_publication, titre, contenu)

  • id: int
  • date_publication : Date
  • titre : String (50)
  • contenu : Text

Ensuite il faut répondre au questionnaire du script comme ci-dessous :

created: src/Entity/Article.php
created: src/Repository/ArticleRepository.php
 
Entity generated! Now let's add some fields!
You can always add more fields later manually or by re-running this command.
 
New property name (press <return> to stop adding fields):
> date_publication
 
Field type (enter ? to see all types) [string]:
> date
 
Can this field be null in the database (nullable) (yes/no) [no]:
> 
 
updated: src/Entity/Article.php
 
Add another property? Enter the property name (or press <return> to stop adding fields):
> titre
 
Field type (enter ? to see all types) [string]:
> string
 
Field length [255]:
> 50
 
Can this field be null in the database (nullable) (yes/no) [no]:
> no
 
updated: src/Entity/Article.php
 
Add another property? Enter the property name (or press <return> to stop adding fields):
> contenu
 
Field type (enter ? to see all types) [string]:
> text
 
Can this field be null in the database (nullable) (yes/no) [no]:
> no
 
updated: src/Entity/Article.php
 
Add another property? Enter the property name (or press <return> to stop adding fields):
> 
 
 
           
 Success! 
           
 
Next: When you're ready, create a migration with php bin/console make:migration

Ensuite nous pouvons faire la migration de doctrine :

symfony console make:migration

Puis ensuite on migre les données :

symfony console d:m:m

Fixtures avec Symfony 6 :

Nous allons importer ce bundle dans notre projet mais sans l’avoir en version de production car il nous sera utile durant la période de développement de l’application.

composer require --dev orm-fixtures

Nous allons également importer Faker qui va nous servir à utiliser de fausses données lors de l’étape de développement :

composer require --dev fakerphp/faker

Après avoir effectuer ces opérations, une nouvelle classe a été crée à l’emplacement : src/DataFixtures/AppFixtures.php

<?php

namespace App\DataFixtures;

use Faker\Factory;
use Faker\Generator;
use App\Entity\Article;
use Doctrine\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\Fixture;

class AppFixtures extends Fixture
{

    /**
     * @var Generator
     */
    private Generator $faker;

    public function __construct()
    {
        $this->faker = Factory::create('fr_FR');
    }

    public function load(ObjectManager $manager): void
    {
        // Création d'une boucle qui va créer 50 articles aléatoires
        // Chaque article aura un titre, un contenu, une date de publication qui seront générés aléatoirement
        for ($i=1; $i <= 50; $i++) { 
            $article = new Article();
            $article->setTitre($this->faker->sentence(4))
                ->setContenu($this->faker->paragraph)
                ->setDatePublication($this->faker->dateTimeBetween('-6 months'));
            $manager->persist($article);
        }
        $manager->flush();
    }
}

Et pour générer l’envoie des données sur l’application, nous devons exécuter la commande suivante :

symfony console doctrine:fixtures:load

Ou de manière plus courte 

symfony console d:f:l

Voici ci-dessous une image du résultat final :

Symfony 6 Fixtures - Résultat

Sources :

https://symfony.com/bundles/DoctrineFixturesBundle/current/index.html
https://fakerphp.github.io/

Susceptible de vous intéresser :