Přístup ke konfiguraci v presenterech

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

Vypadá to, že neexistuje rozumná alternativa Environment::getConfig(), která by byla v souladu s DI. Přitom požadavek na přístup ke konfiguraci v presenteru nebo komponentě je legitimní a docela častý.

Navrhuji aby se v PresenterFactory obsah konfigurace (sekce „parameters“ v neon konfiguraci, potažmo $this->context->parameters v PresenterFactory) posílal do každého presenteru přes nějaký setter. V presenteru by pak mohla vzniknout public metoda getConfig().

S tím souvisí i to, že PresenterFactory::$container je private. Podle mne k tomu není důvod, měl by být protected, použití containeru ve vlastní PresenterFactory je v pořádku.

vvoody
Člen | 910
+
0
-

Ale presenter nepotrebuje konfigurovat (alebo hej? npr?). Konfiguruju sa sluzby a tym tie parametre predas v configu. Predavanie vsetkych parametrov do presenteru je podla mna stale v rozpore s DI, to uz si ich mozes rovno tahat z contextu.

22
Člen | 1478
+
0
-

stačí bohatě inject<Something>

vvoody
Člen | 910
+
0
-

Tak tak, ked uz je clovek lenivy cpat funkcionalitu do sluzby, tak si aspon vytvorim triedu/sluzbu ktora tie parametre dopravi do presenteru cez

22 napsal(a):

stačí bohatě inject<Something>

Ale prave len tie parametre, ktore v tom presenteri potrebujem. Toto je podla mna v souladu s DI.

blindAlley
Člen | 31
+
0
-

Neřekl bych že setovat celou konfiguraci do presenteru je nějak extra špatně, stejně jako celou konfiguraci, dostává presenter vždy celý http request, ačkoli třeba cookie využije jen někdy. Mě přijde celá konfiguraci jako jedna služba. Ale asi je fakt, že pokud to nepotřebuje dělat sám framework kvůli sobě, tak není důvod aby to v něm bylo, ať si to každý zařídí sám.

Nicméně stávající řešení s inject<Service>, kterým si to mohu sám zařídit, pak vyžaduje psát na přenesení kousku pole z konfigurace zvlášť službu a to určitě není to pravé. Ale D. Grudl už zmínil, že upravovat setování služeb do presenterů bude možné přímo přes konfiguraci, to by bylo řešení.

A co to PresenterFactory::$container nově protected místo stávajícího private? Vůbec jako nejlepší řešení mi přijde, aby se PresenterFactory::createPresenter($name) změnila na PresenterFactory::createPresenter($name, Nette\DI\Container $container) a $container property z té třídy úplně zmizela, protože nikde jinde není potřeba.

Teyras
Člen | 81
+
0
-

Co je špatně na tom, že Presenter dostane nějaký parametr? Může to být třeba nějaká cesta, kterou chci použít v šabloně, to bych měl nahrazovat službou?