Vlastní extension – jednoduchý návod od A – Z
- pasik
- Člen | 8
Ahoj,
nějakou dobu s Nette dělám (tak normálně) a trápí mě, že opravdu nemůžu pochopit jak vytvořit vlastní rozšíření.
Není problém s packagist, composerem ani s vytvořením samotného PHP kódu (který bude něco dělat).
Čtu pořád dokola „návod“ https://doc.nette.org/…n/extensions ale je to spíše takový obecný popis a hlava mi to nebere. Nevím co je addSetup, getDefinition, jak předat/přidat třeba nějaké další třídy / služby / parametry atd.
Několik rozšíření jsem studoval, ale přijde mi, že je napsané každé uplně jinak, navíc je kolem toho připojeno X dalších tříd a já se utápím ve zmatku a smutku.
Proto bych se chtěl zeptat, ač jsem asi hodinu neúspěšně googlil.
Neexistuje nějaký jednoduchý tutoriál na nějakou jednoduchou extension (třeba nějaké články, nebo stažení kurzů z ČNB nebo něco takhle jednoduchého), kde by autor vysvětlil vše od A-Z (proč tohle, co dělá tohle), viděl jsem extensions s modely , komponentami, presentery atd…
Planette.org je plné hezkých postupů a návodů, ale na tohle nic.
Moc díky za info.
Editoval pasik (21. 11. 2019 22:17)
- pasik
- Člen | 8
Mno tak se mi nějak podařilo to aspoň trošku pochopit a napsal jsem si „rozšíření“, které se jmenuje HelloWorld (je to defakto jen model), který má jen 1 nastavení a to „name“ takže to vypíše HelloWold $name.
OK fajn. (Docela jsem to pochopil z této extenze https://github.com/…GoogleMapAPI)
Nicméně co mi tedy není vůbec jasné: zde https://doc.nette.org/…n/extensions#… se používá k nastavení „služeb“ či čehosi @connection a @logger, chápu to tak, že to jsou pojmenované služby v neonu? Nešly by injectnout normálně? Já když to zkouším u sebe (a řekněme, že to jsou nějaké vymyšlené služby tak mám)
services:
tag: App\Model\Tag
a dále
$builder->addDefinition($this->prefix('hello'))
->setFactory(Pasik\Model\HelloWorld::class, [@tag])
->addSetup('setName', array($config['name']));
a pak když to dumpnu, tak vidím jen string „tag“. Takže nechápu jak to funguje. Zkoušel jsem tam dávat všechno co je popsáno tady https://doc.nette.org/…onfiguration, třeba @Nette\Database\Connection, nebo @http.request::getRemoteAddress() a vždy to napíše use of undefined constant request – assumed …
Jsem z toho jelen. Vysvětlí / objasní někdo?
- Martk
- Člen | 661
Nejlepší věc na učení je, že si budeš psát na čistém projektu jen s nette/di a vždycky se podíváš do cache, co se ti vygenerovalo.
Tady máš nějaký článek, kde vidíš zápis ⇒ výsledek di containeru: https://f3l1x.io/…ovat-sluzby/
předávání služeb přes jejich jméno (@tag) je potřebné jen, pokud je autowired vypnutý.
Aby se popsalo, co všechno se dá v nette/di dělat a jak to funguje, tak to vydá na několik dlouhých článků, aby to pochopil i člověk, který to vidí poprvé.
- Felix
- Nette Core | 1247
@pasik Mrkni na balicky https://github.com/contributte/,
skoro kazdy ma slozku src/DI
kde je nejaka CompilerExtension
.
Zkus si najit nejakou jednoduchou a pridat si ji do cisteho projektu. Pak bych
se mrknul do temp/cache/nette.configurator
a tam nasel odpovidajici
vygenerovanej container.