Formuláře a chybové hlášky při redirectu
- Etch
- Člen | 403
Omlouvám se za triviální dotaz, ale nette zkouším teprve druhý den takže se ještě moc nechytám.
Pokud budu mít formulář udělaný pomocí AppForm a potřebuji zamezit jeho opětovnému odeslání pomocí refreshe stránky takže udělám redirect jenže bych potřeboval po redirectu zobrazit zprávu o úspěchu či selhání operace. Teď to řeším ve zkratce následujícím způsobem pomocí signálu :
Ale přesto by mě zajímalo jestli to nejde řešit nějakým jednodušším způsobem. Předem děkuji.
Editoval Etch (24. 9. 2008 20:27)
- vlki
- Člen | 218
Osobne jsem se inspiroval resenim v CakePHP, kde se da vyhodit flash zprava. Idealni pro vyhazovani hlasek po uspesne uprave/pridani/vymazu. Postaveno je to na sessions. Prikladam jednoduchou komponentu, ktera to zajistuje.
U setu se take nastavuje, jestli chci vyhodit error, varovani nebo potvrzeni. Podle toho se mi to obarvi cervene, zlute respektive zelene:)
Ale zajimalo by mne take, jestli to nekdo resi jeste lepe.
Editoval vlki (25. 9. 2008 10:41)
- David Grudl
- Nette Core | 8258
Flash messaging je věc, kde se raději neinspirujte frameworky, protože jsem ještě neviděl žádný, kde by to řešili dobře.
Fakta:
- je běžná věc, že se pod jedním session ve dvou oknech provádí dvě operace
- není neobvyklé odeslat oba formuláře téměř naráz
- hláška se musí objevit ve správném okně, nezávisle na jiných oknech
- a to i po refreshi (třeba kvůli nenačtenému obrázku, netrpělivému uživateli, …)
Pokud chápeme, že
- okno prohlížeče představuje nejnižší rozlišovací jednotku
- v rámci jedné session může operovat (a často operuje) naráz více oken
- jednotlivá okna nelze na straně serveru odlišit
tak existuje jen jedno možné řešení – přenášet
výsledek operace přes URL. Buď v cestě (redirect na
example.com/success
) nebo v parametru URL
(example.com/sent.php?message=Odesláno+v+pořádku
) a to nejlépe
jen pomocí identifikátoru (example.com/sent.php?message=1
).
Identifikátor zprávy pak může být napevno propojen s textem
($messages[1] = 'Odesláno v pořádku'
) nebo může být
proměnný: