Last active
February 12, 2024 12:43
-
-
Save jgauthi/14787acc1beb90ace2eb2342d732afb2 to your computer and use it in GitHub Desktop.
[Symfony] Example of generation of fixture with yaml files (Nelmio Alice)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// src/DataFixtures/AppFixtures.php | |
namespace App\DataFixtures; | |
use App\DataFixtures\ORM\AppNativeLoader; | |
use Doctrine\Bundle\FixturesBundle\Fixture; | |
use Doctrine\Persistence\ObjectManager; | |
class AppFixtures extends Fixture | |
{ | |
public const USER_PASSWORD = 'defaultPasswordForLocalDevelopment'; | |
/** | |
* Generate data fixtures for local development | |
* @param ObjectManager $manager | |
* @throws \Nelmio\Alice\Throwable\LoadingThrowable | |
*/ | |
public function load(ObjectManager $manager): void | |
{ | |
$aliceFolder = __DIR__.'/Alice'; | |
$loader = new AppNativeLoader; | |
$objectSet = $loader->loadFiles([ | |
$aliceFolder.'/Cinema.yaml', | |
$aliceFolder.'/User.yaml', | |
$aliceFolder.'/Movie.yaml', | |
])->getObjects(); | |
foreach($objectSet as $object) { | |
$manager->persist($object); | |
} | |
$manager->flush(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// src/DataFixtures/ORM/AppNativeLoader.php | |
namespace App\DataFixtures\ORM; | |
use Faker\Factory as FakerGeneratorFactory; | |
use Faker\Provider\Base as FakerDataProvider; | |
use Nelmio\Alice\Faker\Provider\AliceProvider; | |
use Nelmio\Alice\Loader\NativeLoader; | |
use Faker\Generator as FakerGenerator; | |
class AppNativeLoader extends NativeLoader | |
{ | |
public const LOCALE = 'fr_FR'; | |
protected function createFakerGenerator(): FakerGenerator | |
{ | |
// Localized Fake Data | |
$generator = FakerGeneratorFactory::create(static::LOCALE); | |
$generator->addProvider(new AliceProvider); | |
$generator->seed($this->getSeed()); | |
// Alice: add methods | |
$generator->addProvider(new FakerDataProvider($generator)); | |
return $generator; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# src/DataFixtures/Alice/Cinema.yaml | |
# Create fixture with Alice/Faker library (https://github.com/nelmio/alice), more info on function: https://github.com/fzaninotto/Faker | |
App\Entity\Cinema: | |
cinema (template): | |
title: '<word(3)> Demo' | |
slug: '<word()>' | |
host: '<domainName()>' | |
enabled: true | |
defaultLang: 'FR' | |
city: '<city()>' | |
addressPart1: '<streetAddress()>' | |
addressPart2: '<secondaryAddress()>' | |
zipCode: '<postcode()>' | |
latitude: '<latitude()>' | |
longitude: '<longitude()>' | |
email: '<safeEmail()>' | |
cinema_0 (extends cinema): | |
user: '@user_0' | |
title: 'Official cinema' | |
slug: 'primary' | |
cinema_1 (extends cinema): | |
user: '@user_1' | |
title: 'Secondary cinema without reservation for tests' | |
slug: 'secondary' | |
cinema_2 (extends cinema): | |
user: '@user_2' | |
title: 'Third cinema with disabled status' | |
slug: 'third' | |
enabled: false |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# src/DataFixtures/Alice/Movie.yaml | |
parameters: | |
# List from http://www.allocine.fr/film/meilleurs/ | |
someMovieNameArray: ['Forrest Gump', 'La Ligne verte', 'Bohemian Rhapsody', 'Green Book : Sur les routes du sud', 'Your Name', 'Coco', 'La Liste de Schindler', '12 hommes en colère', 'Le Parrain', 'Le Seigneur des anneaux : le retour du roi', 'The Dark Knight, Le Chevalier Noir', 'Django Unchained', 'Gran Torino', 'Les Evadés', 'Pulp Fiction', 'Lion', 'Tu ne tueras point', 'Le Seigneur des anneaux : la communauté de l''anneau', 'Le Roi Lion', 'Fight Club', 'Le Seigneur des anneaux : les deux tours', 'Vol au-dessus d''un nid de coucou', 'Gladiator', 'Interstellar', 'Il était une fois en Amérique', 'Star Wars : Episode V - L''Empire contre-attaque', 'Les Enfants Loups, Ame & Yuki', 'Whiplash', 'Seven', 'Le Bon, la brute et le truand'] | |
someFormatArray: ['vosta', 'vf', 'vidéo et 16mm', 'scope 3D numérique', 'scope', 'numérique', 'pano'] | |
someGenreArray: ['Comédie', 'comédie musicale', 'comédie romantique', 'Romance, drame', 'film musical', 'Science fiction, fantastique', 'fantastique', 'court-métrage', 'action', 'documentaire'] | |
someBanArray: ['', 'Tous publics, dès 8 ans', 'Tous publics, dès 5, 6 ans', 'interdit -18 ans', 'Avertissement - de 12 Ans', 'Avertissement : des scènes, des propos ou des imag', 'Des scènes susceptibles de heurter la sensibilité', 'interdit moins 18 ans avec avertissement', 'Déconseillé moins de 14 ans'] | |
someWarningArray: ['', 'Avertissement : des scènes, des propos ou des images peuvent heurter la sensibilité des spectateurs', 'Certaines scènes de ce film sont de nature à choquer un jeune public.', 'Certaines scènes de ce film risquent de heurter un jeune public.', 'Ce film comporte de nombreuses scènes de violence particulièrement cruelles susceptibles de heurter un public sensible.', 'Ce film de genre comprend des scènes d’effroi susceptibles de heurter un public de moins de douze ans.', 'Tous publics avec avertissements pour les personnes sensibles'] | |
App\Entity\Movie: | |
movie_{1..20}: | |
title (unique): '<randomElement($someMovieNameArray)>' | |
originalTitle: '@self->title' | |
created: '<dateTimeThisYear()>' | |
modified: '50%? <dateTimeThisMonth()>' | |
releaseDate: '80%? <dateTimeThisYear()>' | |
originalReleaseDate: null | |
orderIndex: '<numberBetween(0, 500)>' | |
visa: '<randomDigitNotNull()>' | |
format: '<randomElement($someFormatArray)>' | |
genre: '<randomElement($someGenreArray)>' | |
ban: '<randomElement($someBanArray)>' | |
warning: '<randomElement($someWarningArray)>' | |
length: '<numberBetween(30, 240)>' | |
origin: '<country()>' | |
director: '<name()>' | |
casting: '<name()>, <name()>, <name()>' | |
summary: '<realtext(120)>' | |
distributor: '<company()>' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# src/DataFixtures/Alice/User.yaml | |
App\Entity\User: | |
user (template): | |
plainPassword: !php/const App\DataFixtures\AppFixtures::USER_PASSWORD | |
enabled: true | |
user_{0..1} (extends user): | |
site: '@site_<current()>' | |
user_2 (extends user): | |
site: '@site_2' | |
enabled: false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment