Ako korektne zistiť metódu PresenterRequestu?

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

Ahojte

Vo svojom BasePresenter od ktorého odvodzujem nové mám v metóde startup() i registrovanie translatoru pre jazykové mutácie

<?php
	NEnvironment::getServiceLocator()->addService('Nette\ITranslator', $translator);
?>

Mojím problémom je to, že v prípade, ak nastane chyba a vykoná sa ErrorPresenter, tak mi na tomto riadku hodí exception, že Service je už zaregistrovaná. Na Errorpresenter sa len forwarduje.

Ja by som potreboval podmienku špecifikovať, aby sa služba registrovala len ak PresenterRequest nebol metódou FORWARD.

je nasledujúci zápis v Presenteri korektný a je odporučené ho používať ?

<?php
	if ($this->getRequest()->getMethod() != 'FORWARD')
?>

Ďakujem

Panda
Člen | 569
+
0
-

To není moc dobrý postup, ono to může vadit ve více situacích, než jen forwardování, například při testování. Spíš bych kontroloval, jestli service již není zaregistrovaná:

if (Environment::getServiceLocator()->hasService('Nette\ITranslator') {
	// ...
}

Případně bych ještě zvážil registraci a automatické vytvoření služby přes továrnu, stačí zapsat do config.ini místo názvu třídy callback na danou továrnu:

service.Nette-ITranslator = MyTranslator::createService
jardo
Člen | 17
+
0
-

Panda napsal(a):

To není moc dobrý postup, ono to může vadit ve více situacích, než jen forwardování, například při testování. Spíš bych kontroloval, jestli service již není zaregistrovaná:

if (Environment::getServiceLocator()->hasService('Nette\ITranslator') {
	// ...
}

Případně bych ještě zvážil registraci a automatické vytvoření služby přes továrnu, stačí zapsat do config.ini místo názvu třídy callback na danou továrnu:

service.Nette-ITranslator = MyTranslator::createService

Díky moc!

Ondřej Mirtes
Člen | 1536
+
0
-

Registruj Translator v metode createTemplate.

Panda
Člen | 569
+
0
-

A když bude chtít překládat formuláře, tak co? To má v metodách render<view>(); registrovat translator do každého formuláře zvlášť?

redhead
Člen | 1313
+
0
-

BaseForm? ;)

Panda
Člen | 569
+
0
-

A to si má BaseForm po připojení k Presenteru vynucovat vytvoření jeho šablony jen kvůli tomu, aby si mohl načíst instanci ITranslatoru? Nebo si vytvářet novou instanci ITranslatoru a mít některá lokalizační data načtená v paměti hned několikrát? Ani jedno mi tedy nepřipadá jako moc elegantní řešení…

Mě osobně připadá jako ideální líná inicializace služby továrnou, případně v události Application::onRequest().