Nextras/ORM registrace repositáře z DI

Barbarossa
Backer | 72
+
0
-

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 | 6230
+
+3
-

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

hrach
Člen | 1818
+
+1
-

Doc je k tomu na webu: https://nextras.org/…l-definition#…

Barbarossa
Backer | 72
+
0
-

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)

hrach
Člen | 1818
+
0
-

A jmenuje extension, kterou jsi zaregistroval, nextras.orm?

Barbarossa
Backer | 72
+
0
-

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))
hrach
Člen | 1818
+
0
-

Vlastni nextras orm cache registruje OrmExtension. Co je vygenerovano v kontejneru? A jak vypada servise nextras.orm.cache?

Barbarossa
Backer | 72
+
0
-

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…)

https://pasteboard.co/IfIpPQg.png

FilipH
Člen | 5
+
+1
-

Zkusil bych:

services:
	- MyApp\PostsRepository(MyApp\PostsMapper(cache: @nextras.orm.cache))
Barbarossa
Backer | 72
+
0
-

@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()
FilipH
Člen | 5
+
0
-

Ćistě teoreticky:

services:
	nextras.orm.cache:
		autowired: true

Pak by se ten zápis dal použít. Ale nepouštěl bych se do toho, mohlo by to mít hodně „zajímavé“ vedlejší účinky.

hrach
Člen | 1818
+
0
-

@Barbarossa a ty mas jakou verzi nette di?

Barbarossa
Backer | 72
+
0
-

@FilipH super díky s tím to funguje!

@hrach nette/di 3.0.0