Nextras/ORM registrace repositáře z DI

před 9 měsíci

Barbarossa
Backer | 65
+
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.

před 9 měsíci

David Matějka
Moderator | 6030
+
+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

před 9 měsíci

hrach
Člen | 1816
+
+1
-

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

před 9 měsíci

Barbarossa
Backer | 65
+
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)

před 9 měsíci

hrach
Člen | 1816
+
0
-

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

před 9 měsíci

Barbarossa
Backer | 65
+
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))

před 9 měsíci

hrach
Člen | 1816
+
0
-

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

před 9 měsíci

Barbarossa
Backer | 65
+
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

před 9 měsíci

FilipH
Člen | 5
+
+1
-

Zkusil bych:

services:
	- MyApp\PostsRepository(MyApp\PostsMapper(cache: @nextras.orm.cache))

před 9 měsíci

Barbarossa
Backer | 65
+
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()

před 9 měsíci

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.

před 9 měsíci

hrach
Člen | 1816
+
0
-

@Barbarossa a ty mas jakou verzi nette di?

před 9 měsíci

Barbarossa
Backer | 65
+
0
-

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

@hrach nette/di 3.0.0