Action do jiného presenteru
- Northys
- Člen | 29
Zdravím,
potřeboval bych vytvořit formulář, který bude odkazovat do jiného
presenteru.
Na hlavní stránce mám formulář pro filtrování kurzů, který by měl
směřovat do presenteru Courses, který pak vrátí jen stránku s daty pro
daná kritéria (jazyk, úroveň znalostí).
Je možné nějakým parametrem nastavit action formuláře přímo do presenteru? Našel jsem si na webu action na jiný PHP soubor, ale příjde mi blbost tam psát napevno adresu, když se pak může změnit routa.
Díky moc!
Editoval Northys (1. 9. 2013 21:48)
- Vojtěch Dobeš
- Gold Partner | 1316
V továrničce v presenteru:
$form->setAction($this->link('Presenter:action'));
- duke
- Člen | 650
Běžné je po zpracování formuláře přesměrovat (už proto, abys zabránil nechtěnému vícenásobnému odeslání formuláře) a přesměrovat přeci můžeš po zpracování dat z původního presenteru do libovolného jiného. Z jakého důvodu chceš přesouvat zpracovávání formuláře jinam, když bys měl stejně poté přesměrovat? V čem vidíš výhodu?
- Northys
- Člen | 29
Díky moc za rychlou odpověď @mojtech.dobes
@duke kam si mám uložit data, které potom budu potřebovat jinde? session? hmm… není náhodou v nette pro každý presenter extra „složka“ pro session data?
EDIT: ať si to pošlou klidně 100x… nic se stejně nemůže stát, je to jen na filtrování dat, která se vypíšou. žádné přihlášení, edity atp.
Editoval Northys (1. 9. 2013 22:14)
- Vojtěch Dobeš
- Gold Partner | 1316
Nope, není. Ale duke podotknul dobrou věc… může to být cesta k lepšímu návrhu. Ale to by se dalo usuzovat až po spatření více kódu (aspoň pro mě to tak platí :) ).
- Northys
- Člen | 29
vojtech.dobes napsal(a):
Nope, není. Ale duke podotknul dobrou věc… může to být cesta k lepšímu návrhu. Ale to by se dalo usuzovat až po spatření více kódu (aspoň pro mě to tak platí :) ).
jak jsem napsal do editu – je to jen pro SQL where, nic se nezapisuje, pouze selektuje, takže nevidím důvod, proč to neudělat takhle…
EDIT: http://mediterin.cz/www/ viz tabulka vyhledávání kurzů, ještě je tam formulář na pevno – bude pak odkazovat do http://mediterin.cz/www/kurzy kde se pak vypíšou jen určité jazyky.
Editoval Northys (1. 9. 2013 22:16)
- duke
- Člen | 650
Northys napsal:
@duke kam si mám uložit data, které potom budu potřebovat jinde? session?
Pokud ta filtrovací data nejsou příliš obsáhlá, tak si je prostě předej v parametrech příslušné akce presenteru (tj. přes url). Tzn. něco jako:
$this->redirect('CoursesPresenter:list', array(
'language' => $language,
'level' => $level,
'lector' => $lector
));
Pokud jsou data obsáhlejší, můžeš si je uložit přes náhodně vygenerovaný klíč např. do session a přes parametr si poslat jen onen klíč, podle kterého to v té session najdeš. Kdybys použil konstantní umístění v session, mohlo by docházet ke konfliktům (např. dvě okna ve stejném prohlížeči s různým filtrováním, atp.). V případě, že by ses rozhodl použít session, chtělo by to pak ještě vyřešit i expiraci těch klíčů, aby se tam příliš nehromadily.
Northys napsal:
hmm… není náhodou v nette pro každý presenter extra „složka“ pro session data?
Z kódu metody Presenter::getSession
je zřejmé, že sekci (ty tomu říkáš „složka“) session je třeba
specifikovat parametrem, jinak dostaneš přímo službu Session (a nikoli
sekci). Tj. např.:
$coursesSession = $this->getSession('coursesFilters');
$coursesFilters = $coursesSession[$filterKey]; // $filterKey je parametrem akce presenteru