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.
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.
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ě.
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.
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.
Přidat komentář