Navázání na parametry z kontextu u otázky #20363
- Tirus91
- Člen | 199
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
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)
- David Kudera
- Člen | 455
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é.