Services (služby)

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

Ahoj, koukal jsem, hledal jsem, ale nikde jsem nenašel nějaký popis služeb, co to konkrétně je a jak to funguje, co to musí splňovat apod. Můžete prosím někdo sepsat aspoň stručné shrnutí těch pár základních věcí, ať jsem v obraze, když se se službami ohání v příkladech a dokumentaci? Dikec.

Jan Tvrdík
Nette guru | 2595
+
0
-

ServiceLocator je třída implementující obecné rozhraní IServiceLocator. Jejím úkolem je dovávat třídy, které je potřeba (většinou ty, které splňují dané rozhraní).

Např. Environment::getUser() požádá ServiceLocator, aby jí sehnal někoho, kdo zvládá rozhraní IUser.

Editoval Jan Tvrdík (8. 12. 2008 16:23)

romansklenar
Člen | 655
+
0
-

David by možná řekl, že jsou to důmyslnější singletony, dotupné odkudkoliv. Získání objektů nemusí být striktně podle jména rozhraní.

Pár příkladů:

config.ini

; za = je vždy jméno třídy nebo callback metody, která má být zavolána, musí však vracet instanci třídy (návrhový vzor továrna)
service.Nette-Security-IAuthenticator = Users
service.Nette-Security-IAuthorizator  = "Acl::factory()"
service.CMS-Web-Language = Language
service.CMS-Options      = Options

použití:

$acl  = Environment::getService('Nette\Security\IAuthorizator');
$acl->isAllowed(...);

$lang = Environment::getService('CMS\Web\Language');
$collation = $lang->collation;

Editoval romansklenar (8. 12. 2008 19:52)

Petr Daňa
Člen | 109
+
0
-

Áha, teď už je mi to jasnější, díky za vysvětlení.