Nextras/ORM registrace repositáře z DI
- Barbarossa
- Člen | 74
Ahoj,
chtěl bych se zeptat zda je možnost zaregistrovat repositář do modelu přes DI extenzi. Využít bych to chtěl při tvorbě vlastních composer balíčků (users, articles atd.). Jestli to jde, tak je to dobré řešení nebo na to jdu úplně špatně?
Nikde jsem nedohledal co dělá třeba DependencyProvider
nebo
RepositoryLoader
(a jak je použít). Díky za každou radu.
- David Matějka
- Moderator | 6445
Ahoj, zajímá tě RepositoryFinder, defaultně se používá PhpDocRepositoryFinder, ale můžeš jej nahradit za DIRepositoryFinder, nextras pak bude hledat repozitáře dle registrovaných služeb v DIC namísto php docu. v configu stačí uvést něco jako:
orm:
repositoryFinder: Nextras\Orm\Bridges\NetteDI\DIRepositoryFinder
a pak registrovat jednotlivé repozitáře jako službu
- Barbarossa
- Člen | 74
pokud použiju definici služby jako níže v příkaldu tak mi to hodí
Service of type Nette\Caching\Cache needed by $cache in Nextras\Orm\Mapper\Dbal\DbalMapper
.
Nette/Cache by už měla být zaregistrovaná stejně jako dbal connection a
coordinator ne?
services:
- MyApp\PostsRepository(MyApp\PostsMapper(..., @nextras.orm.cache))
Editoval Barbarossa (20. 5. 2019 15:43)
- Barbarossa
- Člen | 74
jj
extensions:
nextras.dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
nextras.orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
nextras.orm:
model: App\Model\Orm\Orm
repositoryFinder: Nextras\Orm\Bridges\NetteDI\DIRepositoryFinder
services:
- MyApp\PostsRepository(MyApp\PostsMapper(..., @nextras.orm.cache))
- Barbarossa
- Člen | 74
Jo vytvoří se pod jménem: nextras.orm.cache s instancí
Nette\Caching\Cache
Nenajde to žádnou instanci Nette\Cache (pokud to nechám prázdné).
Zapomněl jsem zmínit že to zkouším na Nette 3.0 (DI 3.0, Caching 3.0, Orm a
Dbal 3.1…)
- Barbarossa
- Člen | 74
@FilipH paráda díky!
Jak tu cache ale zaregistrovat do DI abych ji nemusel do toho argumentu předávat?
Tj aby stačilo tohle:
services:
- MyApp\PostsRepository(MyApp\PostsMapper()
- balbos
- Člen | 1
Zdravím,
prošel jsem detailně toto vlákno a i další příspěvky na fóru a moc
moudrý z toho nejsem.
Řeším podobný problém jako @Barbarossa – v rámci aplikace chci
mít několik composer balíčků (Users, Articles, Categories, apod.). Je
v celku pravděpodobné, že v rámci jednoho balíčku bude i více ORM
repozitářů (např. Articles a Categories společně, Users samostatně).
Bohužel jsem nikde nenašel nějaký příklad, podle kterého bych toto
udělal.
Můžete mě prosím někam navést? Nebo zaslat odkaz na open source projekt,
kde je to takto vyřešené?
Díky
- Marek Bartoš
- Nette Blogger | 1274
@balbos Měl by ti stačit tento config. Pak už jen registruješ jednotlivé repozitáře a mappery do služeb.
extensions:
dbal: Nextras\Dbal\Bridges\NetteDI\DbalExtension
orm: Nextras\Orm\Bridges\NetteDI\OrmExtension
orm:
model: Nextras\Orm\Model\Model
repositoryFinder: Nextras\Orm\Bridges\NetteDI\DIRepositoryFinder
services:
- Nette\Caching\Cache
Případně se mrkni, jak mám setup udělaný já: https://github.com/…/wiring.neon