Hromadné vytvoření služeb v Neon

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
chap
Člen | 81
+
0
-

Ahoj,
nevím jestli to nějak jde, ale líbila by se mi možnost v konfiguraci automatického vytváření služeb. Teď si přidávám nějak takto:

services:
	users : UsersRepository
	projects : ProjectsRepository

Když však projekt má více repozitářů, dochází k nepřehlednosti. Bylo by fajn něco takového (vycházím z toho, co bylo v sandboxu):

services:
	mapping:
		*: Repozitare\*Repository

Asi jsem tuto konstrukci dobře nepochopil, ale snad vy pochopíte, co tím chci docílit.
Takto dostanu tuto výjimku:
Service ‚mapping‘: Unknown or deprecated key ‚*‘ in definition of service.

jiri.pudil
Nette Blogger | 1032
+
+3
-

Tahle konstrukce se týká jenom mapování presenterů na třídy. Servisy musíš vyjmenovat (a třeba vyčlenit do samostatného souboru, abys to měl přehlednější), nebo si napsat vlastní extension, které je projde a zaregistruje.

Šaman
Člen | 2665
+
+5
-

Služby nemusíš pojmenovávat, pokud má každá unikátní třídu/rozhraní:

services:
    - UsersRepository
    - ProjectsRepository

Rozhodně je lepší je vyjmenovávat, než si je nějak magicky vytvářet (vyzkoušeno:), dokonce i presentery si občas vytvářím ručně a nikoliv pomocí factory.

Editoval Šaman (4. 11. 2014 9:32)

chap
Člen | 81
+
0
-

Ahoj, asi to řešit takto – spíš mě to napadlo, jestli to není možné tak. Jen ještě jedna hloupá otázka:
Když vytvořím tu službu přes

services:
    - UsersRepository

a v presenteru bych chtěl volat

$this->context->getService("UsersRepository"); // očekávám pojmenování dle třídy

tak dostanu Service not found. Možná dospějeme k tomu, že služby nepoužívám správně :)

David Matějka
Moderator | 6445
+
0
-

Pouziti context je deprecated, sluzbu si injectni

chap
Člen | 81
+
0
-

super :) konečně se mi podařilo použít DI. Díky :)