L'entité est générée et la table en base de données est créée grâce à la migration. Mais pour l'instant il n'y a aucune donnée.
Plutôt que de générer manuellement des données, nous allons automatiser le processus en rédigeant des fixtures !
Inutiles en production puisque vous disposerez des véritables données, les fixtures permettent de générer rapidement un large volume de données et donc simuler un environnement de production lors du développement.
Installation de hautelook/alice-bundle
Doctrine propose un bundle doctrine/doctrine-fixtures-bundle pour générer des fixtures écrites en PHP mais d'autres solutions basées sur le système de Doctrine existent. Nous allons utiliser hautelook/alice-bundle qui est basé sur plusieurs autres librairies.
Commençons par installer le composant PropertyAccess:
composer req symfony/property-access
Puis l'activer dans /config/packages/framework.yaml:
framework:
# ...
property_access:
enabled: true
Enfin, installer le bundle:
composer req --dev hautelook/alice-bundle
Celui-ci va se charger de la partie base de données, et se baser sur nelmio/alice qui permet d'écrire nos fixtures en YAML. Pour avoir des données aléatoires, on va pouvoir exécuter les fonctions de Faker.
Configurez la langue utilisée par Faker en modifiant la configuration du NelmioAliceBundle dans /config/packages/nelmio_alice.yaml:
when@dev: &dev
nelmio_alice:
# Faker génèrera des informations en français lorsque c'est possible
locale: 'fr_FR'
# ...
Rédaction des premières fixtures
On souhaite générer 50 événements avec des informations aléatoires. Créez un fichier /fixtures/event.yaml.
On rappelle d'abord le nom de la classe:
App\Entity\Event:
Puis une clé correspondant à l'objet généré. Pour éviter de dupliquer notre bloc 50 fois, on va utiliser la syntaxe {premier..dernier}
:
App\Entity\Event:
# de "event_1" à "event_50"
event_{1..50}:
Enfin, on indique les valeurs pour chacune des propriétés de l'entité:
App\Entity\Event:
event_{1..50}:
# On appelle une fonction de Faker sous la forme <fonction()>
# Voir par exemple https://fakerphp.github.io/formatters/miscellaneous/#currencycode
title: '<currencyCode()> <safeColorName()> <randomDigit()>'
# Ici la description a 75% de chance d'être spécifiée
description: '75%? <realText()>'
# On peut passer des paramètres aux fonctions
startAt: '<dateTimeBetween("-3 month", "+6 month")>'
# Et réutiliser les valeurs des autres propriétés comme paramètres d'autres fonctions
endAt: '<dateTimeInInterval($startAt, "+1 week")>'
Chargement des fixtures
On lance la génération des fausses données:
php bin/console hautelook:fixtures:load
[output]Careful, database will be purged. Do you want to continue y/N ?y
La base va être "purgée": les anciennes données seront supprimées. Relancez la commande pour repartir sur un nouveau jeu de données.
Observez le résultat en base de données:
id | title | description | start_at | end_at |
---|---|---|---|---|
1 | MOP noir 7 | NULL |
2023-08-11 02:58:55 | 2023-08-17 04:54:12 |
2 | PKR blanc 8 | NULL |
2023-07-19 08:17:57 | 2023-07-23 14:03:48 |
3 | CLP bleu 6 | Et il descendit con... | 2022-11-28 19:52:36 | 2022-11-29 15:47:42 |
4 | OMR fuschia 4 | Breda- street, et Je... | 2023-06-01 12:10:53 | 2023-06-03 15:10:33 |
... | ... | ... | ... | ... |