Navázání na parametry z kontextu u otázky #20363

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

Jak bylo již řešeno v Mohu vypsat parametry z config.neon v šabloně?
Jakým způsobem tedy ty parametry mohu získat aniž bych šahal na kontext?

Editoval Tirus91 (19. 8. 2014 8:59)

David Matějka
Moderator | 6445
+
+5
-

Uz tu nekolik otazek na tohle tema bylo, ale radeji odpovim znovu :)

kratce:

nejlepsi je dostat pryc z presenteru zavislost na parametru do komponenty/sluzby

1. Vlozeni parametru primo do presenteru

Pokud potrebujes parametr primo v jednom konkretnim presenteru a vis, ze nebude vhodnejsi to resit bodem 2 nebo 3, muzes tento presenter registrovat v configu jako sluzbu a parametr mu nastavit.

services:
	-
		class: App\MyPresenter
		setup:
			- setFoo(%foo%)

Tento zpusob nejde puzit (zatim), pokud parametr potrebujes v BasePresenteru. To se necha vyresit treba bodem 2 nebo 3

2. Vlozeni parametru do komponenty

(vytvarene gen. tovarnickou)
Klasicky vytvoris komponentu s gen. tovarnickou
a v neonu ji nastavis setup metody:

services:
	-
		implement: FooControlFactory
		setup:
			- setBar(%bar%)

3. Sluzba

Casto nejlepsi reseni. Predstav si treba upload form. Pak potrebujes ten soubor nekam ulozit:

public function processForm(Form $form)
{
	$form->values->file->move(/*kde ted ziskat cestu?*/);
}

proc se o to starat v presenteru? Nejlepsi je udelat si sluzbu – rekneme FileStorage

class FileStorage
{
	protected $dir;

	public function __construct($dir)
	{
		$this->dir = $dir;
	}

	public function handleUpload(FileUpload $upload)
	{
		$upload->move($this->dir . '/' . $upload->sanitizedName);
		//tu cestu si asi nekam ulozim a vratim nejaky identifikator
	}

}

v neonu uz jen registruju

services:
	- FileStorage(%myUploadDir%)

V presenteru pak injectnu sluzbu a nemusim se starat o zadny parametr.


Jaky zpusoby jsou spatne?

spatne jsou krom sahani na context i obecne „ParametersService“, ktere drzi vsechny parametry.

Editoval matej21 (19. 8. 2014 11:58)

Tirus91
Člen | 199
+
0
-

no zde narážím na to, že bych do basepresenteru potřeboval dostat například celou větev a to z toho důvodu, že tam je nastaveno např. zda jsou povolené registrace apod..

Jinak děkuji za odpověď

Editoval Tirus91 (19. 8. 2014 12:30)

David Kudera
Člen | 455
+
0
-

Tirus91 napsal(a):

no zde narážím na to, že bych do basepresenteru potřeboval dostat například celou větev a to z toho důvodu, že tam je nastaveno např. zda jsou povolené registrace apod..

Jinak děkuji za odpověď

Myslím, že by jsi nemusel narážet. Pořád to můžeš mít v samostatné službě (ať už nějaký autorizátor, nebo cokoliv jiného), kterou ten base presenter bude jen volat. Pokud toto budeš dodržovat, tak se ti to mnohem víc zpřehlední a base presenter (a i všechny ostatní presentery) zůstanou čisté a jednoduché.