Jak naplnit databázi testovacími daty pomocí Symfony a FakerPHP

Jednou z výhod práce s databázovými entitami v Symfony a Doctrine je možnost snadného generování testovacích dat pomocí fixtures. Pokud to spojíte s knihovnou Faker, dostanete v testovacích datech i české řetězce a reálie.

Aktualizuji, nebo spíše stavím novou verzi svého nástroje Edita, který mi slouží jako takové jednoduché CRM přizpůsobené přímo mým potřebám. Pro vývoj a testování podobných věcí je vhodné použít nějaká vymyšlená data, byť samozřejmě kopie produkční databáze je také možnost. Ovšem kdybych chtěl aplikaci někde ukázat, asi bych tam nerad měl skutečná data.

Symfony nabízí s pomocí DoctrineFixturesBundle jednoduchý způsob, kterým databázi naplníte testovacími daty z generátoru. Jedním příkazem databázi naplníte a jiným ji zase vyprázdníte. Trochu mi tam v začátcích chyběl generátor nějakých reálných řetězců. Přeci jenom náhodná změť písmenek pro názvy firem nebo pro adresy člověka neuspokojí.

Neříkám, že jsem objevil Ameriku, ale našel jsem knihovnu FakerPHP. A když jsem zjistil, že umí i lokalizované texty, včetně češtiny, pustil jsem se do implementace. Je to velmi snadné.

Generování textů pomocí FakerPHP

Nejprve samotné generování náhodných textů na základě českých reálií pomocí knihovny Faker. Začněte tím, že si knihovnu přidáte do svého projektu nebo vytvoříte nový:

composer require fakerphp/faker

Faker samozřejmě podporuje autoloading, takže bez problémů jej přidáte do kteréhokoli projektu postaveného na Composeru. Při vytváření nového objektu použije jako parametr českou lokalizaci, abyste dostávali české údaje.

V kódu vidíte několik ukázek generovaných textů, ve spodní části screenshotu je pak ukázka odpovídajícího výstupu.

Image
FakerPHP
Ukázka použití knihovny FakerPHP

Vytvoření testovacích dat v Symfony

Předpokládám, že už máte nějaký alespoň malý projekt s entitami a napojením na databázi. Začněte tedy tím, že pomocí Composeru přidáte podporu fixtures:

composer require --dev orm-fixtures

Po spuštění příkazu vám v projektu vznikne složka src/DataFixtures a v ní soubor AppFixtures.php. Ve třídě AppFixtures najdete metodu load(), která je přesně tím místem, ve kterém si nachystáte vytváření testovacích dat.

Upravený ukázkový kód z dokumentace, který vytvoří dvacítku produktů s názvy Produkt 1 – Produkt 20 a náhodnou cenou od desítky do stovky, vypadá takto:

for ($i = 0; $i < 20; $i++) {
  $product = new Product();
  $product->setName(Produkt '.$i);
  $product->setPrice(mt_rand(10, 100));
  $manager->persist($product);
}
$manager->flush();

Na následujícím obrázku vidíte, jak jsem zapojil do hry knihovnu Faker pro generování entity Zakaznik v mém jednoduchém CRM.

Image
Spojení DoctrineFixturesBundle a FakerPHP
Spojení DoctrineFixturesBundle a FakerPHP

Vygenerování testovacích dat spustíte jednoduchým příkazem Symfony Console:

bin/console doctrine:fixtures:load

Je třeba dát pozor na skutečnost, že obsah databáze bude tímto příkazem kompletně smazán a databáze se naplní jenom daty specifikovanými v metodě load(). Proto si příkaz vždy žádá potvrzení, že myslíte jeho spuštění vážně.

Image
Vygenerované entity
Finální výstup s vygenerovanými entitami v aplikaci postavené nad rozhraním EasyAdmin 4

V reálu samozřejmě budete mít větší množství entit a budete chtít generovat jen některé. DoctrineFixturesBundle samozřejmě tento úkol zvládá, slouží k tomu seskupení fixtures. Podrobnosti k takovému použití najdete v dokumentaci.

Další informace:

Poznámka: Tímto článkem určeným pro začátečníky vykopávám sérii článků o Symfony. Kdysi jsem podobně začal psát o Drupalu a dospělo to až k několika knihám. Tak jsem zvědav, kam se tento blog posune třeba za pět let od tohoto článku.

Tagy

Buďme ve spojení, přihlaste se k newsletteru

Odesláním formuláře souhlasíte s podmínkami zpracováním osobních údajů. 
Více informací v Ochrana osobních údajů.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.

Komentáře k článku

Přidat komentář

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Moje kniha o CMS Drupal

 

Kniha 333 tipů a triků pro Drupal 9


Více na KnihyPolzer.cz

Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

@maxiorel na Twitteru

Maxiorel na Twitteru