Formulář (AppForm) a metoda GET

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

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=…&param1=…&param2=… 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
+
0
-

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
+
0
-

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)

Aurielle
Člen | 1281
+
0
-

Použití IOException není z hlediska „dobrého“ coding standartu správné. I/O operace značí práci se souborem.

Editoval gmvasek (10. 1. 2011 19:49)

joe
Člen | 313
+
0
-

gmvasek: To máš pravdu, změnil jsem to, ale teď nejde o to, jaká by se tam měla vyhazovat, ale o to, že by to tak zůstat podle mě nemělo.