Lze získat context nějak staticky?
- Oggy
- Člen | 306
Nechci zakládat nové téma, ale zajímalo by mě jak tento problém řešíte.
Mám statickou třídu Helpers ..
A potřeboval bych v ní použít context->params[‚wwwDir‘] nebo získat baseUri .. V nejnovější verzi Nette už Environment zanikl.
Jedno řešení je nemít třídu jako statickou a předávat ji context.. Ale myslím, že třída, kde mám různé helpery podobně jako Nette/Utils/String by měla být statická.
- JakubS
- Člen | 15
Oggy napsal(a):
V nejnovější verzi Nette už Environment zanikl.
IMHO nezanikl jen byl upozaděn .
Dotazy na params a chybějící konstanty jsou poslední dobou na denním pořádku. Původní stav je asi zapitý hluboko pod kůží většiny z nás :-)
- Vojtěch Dobeš
- Gold Partner | 1316
Oggy napsal(a):
Nechci zakládat nové téma, ale zajímalo by mě jak tento problém řešíte.
Nechci si tu dělat selfpromo, ale https://forum.nette.org/…on-not-found#…
. Hlavní otázka zní: proč používat nebo nepoužívat
Environment
, potažmo jiné statické třídy. Použití takové
třídy je skrytá závislost, tvůj kód využívající ji se bez ní neobejde
a potřebuje ji k životu, ale nikde se k ní oficiálně nehlásí (zjistí
se to jen studiem zdrojáku). Proto se ustupuje od využívání této třídy,
protože vede právě k takovému nejasnému kódu, který se pak blbě testuje
(použití Environment
se nedá nijak podstrčit).
- Šaman
- Člen | 2663
Tady v DI seki jsou samozřejmě statické třídy zlo.. ale já je
s oblibou používám taky – přesně stejné použití:
CurrentUser::getEntity()
apod.
Problém je, pokud chceš testovat a metoda/šablona si odněkud
magicky/staticky/z requestu tahá nějaká data. Pak je velký problém místo
těch dat podstrčit testovací data. Pokud tě to nepálí, tak to řešit
nemusíš. A pokud testovat chceš, tak se nad každou proměnnou musíš
zamyslet ve stylu: Vím, odkud ji beru? A je to zřejmé z rozhraní, nebo se
to musí vyčíst v kódu? Mohu ji snadno zaměnit za testovací?
Editoval Šaman (23. 10. 2011 18:25)