Ako korektne zistiť metódu PresenterRequestu?
- jardo
- Člen | 17
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
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
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!
- Panda
- Člen | 569
A to si má BaseForm
po připojení k
Presenter
u 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()
.