SetOptions pri vytvarani sluzby uz v konstruktore
- westrem
- Člen | 398
Ahoj,
uvital by som, ak by sa $options
predavali vytvaranej sluzbe uz
v konstruktore a nie o krok neskor za pomoci setOptions
.
V samom kode aplikacie je napisane „TODO better!“
Osobne pouzivam services v konfigu na vytvorenie sluzieb, ktore aplikacia
potrebuje. Tieto sa inicializuju v konstruktore a castokrat su
$options
potrebne uz tu a nie je mozne pockat na krok
setOptions
.
Aby bolo jasne o com vravim
- Blizzy
- Člen | 149
westrem napsal(a):
Osobne pouzivam services v konfigu na vytvorenie sluzieb, ktore aplikacia potrebuje. Tieto sa inicializuju v konstruktore a castokrat su
$options
potrebne uz tu a nie je mozne pockat na kroksetOptions
.
Options jdou v configu nastavovat taky, viz: https://forum.nette.org/…-konfigurace
- westrem
- Člen | 398
Naschval som do postu pripojil link, aby bolo jasnejsie o com vravim. To, ze
idu nastavovat $options
pre sluzbu viem, to je jasne z toho, ze
som pripojil priamo link na miesto kde sa nastavuju.
Ja navrhujem ale zmenu casu kedy su sluzbe predavane. Teraz to totiz funguje takto:
- Vytvori sa sluzba (vola sa
__construct
) (v pripade, ze je v config.ini uvedene ajservice.name.run=true
) - predaju sa parametre ak existuje metoda setOptions
Pri tychto sluzbach nastava problem ten, ze ak chceme aby hned bezali tak ich
potrebujeme mat nastavene od momentu vzniku, resp nastavovat ich v
__construct
, to vsak nie je mozne, kedze $options
sa
predavaju az o krok neskorsie, tzn ked uz je sluzba vytvorena.
Dalej, kedze sa toto deje pocas parsovania config.ini tak nemozme volat ani
Environment::getConfig(section)
pretoze vrati null.
Jedine momentalne schodne riesenie je predavat $options
uz pri vytvarani sluzby.
Rozsiahlejsie riesenie, ktore momentalne pouzivam je, ze mam interface
IInitializable
a za riadok 133
Som si umiestnil nieco taketo
//initialization fix
if ($service instanceof IInitializable) {
$service->init();
}
Takze nerobim inicializaciu v konstruktore ale pomocou metody init, ktoru musi sluzba implementovat ak je inicializovatelna.
- westrem
- Člen | 398
Aha, nevsimol som si, ze Nette ma zase raz dvojake chovanie :-/
Ked mam v config.ini nastavene na factory Classname tak sa to chova inak ako ked je tam callback.
Pri callbacku sa robi presne to co popisujem vyssie aby sa robilo aj pri normalnom Classname.