Formulář (AppForm) a metoda GET
- joe
- Člen | 313
Ahoj,
tak nějak přemýšlím nad tím, jak bych správně měl dělat formuláře
s odesíláním dat metodou GET. Jsem v situaci, kdy mám filtrovací
formulář nad nějakými daty.
V tom filtru mohu nastavit třeba 20 položek.
Po odeslání formuláře metodou GET – je dobré udělat přesměrování nebo ne? U POST je to jasné.
Pokud formulář odešlu, v URL se objeví něco jako ?do=…¶m1=…¶m2=… atd. Pokud mám ve formuláři například select box a v adresním řádku ručně přepíšu pro něj hodnotu na některou, co neexistuje a znovu načtu, v selectboxu se objeví první (nebo výchozí) hodnota. Neměla by se v této době vyhodit vyjímka (IOException)?
Pokud přesměruju, musím na nějakou akci, třeba actionDefault(… a tady všechny parametry??…)
Další věcí by bylo udělat všechny položky filtračního formuláře jako persistentní, ale to se mi moc nechce, protože pak by mi vznikly v tom samém presenteru šíleně dlouhé URL adresy.
Takže otázka na vás, jak to řešíte? Jak se to má řešit?
OT: Teď jsem si vybavil ještě jednu začátečnickou otázku, u čeho si nejsem úplně jistý. Pokud mámm například hlavičku actionDefault($id) a teď chci „poskočit“ v živ. cyklu dál, musím napsat renderDefault(…) a na místo teček budou totožné parametry jako v případě actionDefault?
Předem díky za odpovědi
- bojovyletoun
- Člen | 667
OT: dle mých zkušeností je jedno jaké, tam jsou a je jedno, zda jsou jiné(samy se spárují s těmy z Presenter request alias z routeru), třeba v action se ti hodí mít parametr database a v render se ti naopak bude hodit parametr barevny_skin.
K formuláři:
interně to funguje tak, že pokud odešleš selectbox s „jinou“ proměnnou,
které tam není, tak daný prvek form->values[selectbox]
je
NULL. Což se v prohlížeči znamená, že se zobrazí první hodnota ,. PS:
v selectboxu lze použít funkcti ->skipFirst- hledej . v callbacku si
můžeš vyhodit vyjimku sám.
Editoval bojovyletoun (10. 1. 2011 13:38)
- joe
- Člen | 313
Díky za odpověď. V callbacku si sice vyhodit vyjímku můžu, ale znamená to v každém callbacku kontrolovat, jestli není nějaká hodnota NULL, takže všude by měl být kód
<?php
$data = $form->getValues();
$changed = FALSE;
foreach($data as $value) {
if($value === NULL) {
$changed = TRUE;
break;
}
}
if($changed) throw new Exception(...); // zmeneno
?>
může na to být fce, to je jasné.
Ale řekl bych, že by ta změněná adresa fungovat neměla, protože pak vzniká duplicita a stejný obsah je pro nekonečně mnoho adres.
Editoval joe (10. 1. 2011 20:42)