Lze získat context nějak staticky?

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

vše asi uvedeno v názvu, pokud Environment má zaniknout, bude možné v budoucnu získat kontext staticky?

jde mi hlavně o to, že ORM by potřebovalo přistupovat k připojení k databázi, a je založené na statických voláních např. Page::findByName(‚stranka-1‘)

atd.

smasty
Člen | 90
+
0
-

Nikto netvrdí, že Environment zanikne, dokonca sa aj David Grudl nedávno tu niekde vyjadril, že Environment v Nette bude aj naďalej.

Takže bez problémov: Nette\Environment::getContext();

Oggy
Člen | 306
+
0
-

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
+
0
-

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
+
0
-

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).

22
Člen | 1478
+
0
-

Dobře napsáno/řečeno!

Oggy
Člen | 306
+
0
-

Jasně, zkus prosím teda nastínit, jak bys v tomhle případě svoje vlastní helpery dělal? Jako singleton? nebo na jako službu?

Já mám statické i modely přijde mi to pro moje účely pohodlnější.. můžu si zavolat v šabloně např. Articles::getActual() apod..

Šaman
Člen | 2634
+
0
-

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)