Zjištění hodnoty z configu v presenteru

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

Poradíte mi prosím, jakým způsobem je možné číst hodnoty z config.nette v presenterech? Postup doporučovaný v https://forum.nette.org/…cist-hodnoty pomocí $this->context->params vyhazuje deprecated chybu.

Editoval Andre (17. 8. 2016 20:13)

CZechBoY
Člen | 3608
+
+2
-

Predej si je pres konstruktor nebo setter.

parameters:
    myParameter: Abc
services:
    -
        class: App\Presenter\MyPresenter
        setup:
            - setMyParameter(%myParameter%)
Lukzat
Člen | 5
+
-6
-
$this->context->parameters['nazev_parametru'];
Felix
Nette Core | 1247
+
+5
-

@Lukzat

$this->context->parameters['nazev_parametru'];

Ne, ze by to bylo uplne blbe. Ale v ramci udrzitelnosti a prehlednosti aplikace, je lepsi predavat jenom konkretni parametry a nespolehat se, ze tam mas dostupny context, resp. container.


Ja vetsinou do presenteru nevkladam parametry (@CZechBoY). V presenteru mam povetsinou jenom tovarnicky na jednotlive komponenty a pripadne nejakou mensi logiku ohledne opravneni + tahani entit.

Vyhodu to ma v tom, ze tim „nespinis“ presentery, ale parametry obdrzi az velmi specificke/konkretni komponenty.

class MyPresenter {

	function actionFoo() {
		// potrebuje parametr $foo
	}

	function actionBar() {
		// potrebuje parametr $bar
	}

	function actionBaz() {
		// potrebuje parametr $baz
	}

	function actionFoobar() {
		// potrebuje parametr $foobar
	}
}

Pokud bychom meli takovyhle presenter, tak potrebujeme 4 fieldy a v configu (config.neon) nadefinovat 4 parametry.

services:
    -
        class: MyPresenter
        setup:
            - setFoo(%foo%) #1
            - setBar(%bar%) #2
            - setBaz(%baz%) #3
            - setFoobar(%foobar%) #4

Pokud by to ale byly 4 komponenty, tak se nam to hezky vycisti.

services:
	# rekneme, ze to jsou tovarnicky
    - FooControlFactory(%foo%)
    - BarControlFactory(%bar%)
    - BazControlFactory(%baz%)
    - FoobarControlFactory(%foobar%)
class MyPresenter {

	function createComponentFoo() {}
	function createComponentBar() {}
	function createComponentBaz() {}
	function createComponentFoobar() {}
}

Presenter je cisty, komponenty maji presne svoje parametry a vsichni jsou stastni. :-)

Nerikam, ze je to jedina cesta. Ale treba se to bude hodit.

Editoval Felix (18. 8. 2016 9:01)