Flash zprávy a jejich omezení na 3 vteřiny
- Ascaria
- Člen | 187
Zdravím,
když se mi v adminu stránka, na které se má zobrazit flash zpráva, načítá déle (v handle se smaže cache a datagrid musí vše načíst napoprvé bez cache), nedojde k zobrazení oné flash zprávy. Řešením mi bylo zatím v presenter.php přepsat 3 vteřiny na 30.
Osobně si myslím, že nastavení životnosti v neonu by nebylo na škodu, případně v třetím argumentu flash zprávy možnost overridnout životnost flash zprávy samostatně. (Případně mě omluvte, jestli to už nastavit jde, nikde sem tu o tom neviděl zmínku)
Proto bych se chtěl zeptat, co si myslíte o tom, prodloužit životnost flash zpráv?
- Filip Procházka
- Moderator | 4668
Myslím si, že nechápeš, na co jsou flash zprávy. Pokud něco, tak by dávalo smysl jedné konkrétní zprávě třeba prodloužit životnost, globálně to není dobrý nápad.
- Ascaria
- Člen | 187
Tak mi prosím vysvětli na co jsou. Mám je použité v handle metodě po nějaké operaci, a následně po redirectu je chci v nějakém výpisu položek zobrazit.
Takhle jak jsou ty flash message udělané jsou málo spolehlivé, jelikož delší script zapříčiní, že se nezobrazí a uživatel nedostane odpověď.
Edit: podle mého názoru by bylo rozumné například nechat flash zprávy
v session 30 sec a pomocí
http://spoiledmilk.dk/…reshing-page
změnit url prohlížeče po kýžených 3 sec. Když browsr nepodporuje
onpopstate nebo bez js, bude při refreshování zpráva vidět 30 sec no.
Editoval Ascaria (9. 5. 2012 16:08)
- Ascaria
- Člen | 187
Ot@s napsal(a):
Ascaria napsal(a):
(v handle se smaže cache a datagrid musí vše načíst napoprvé bez cache)Proč mažeš v handle cache? Nechápu, dyť to není vůbec potřeba…
Jsem bezmocný proti tomuto argumentu. Bohužel ale v handle mětodě volám metodu modelu, která kus cache maže.
- Ot@s
- Backer | 476
Ascaria napsal(a):
Proč mažeš v handle cache? Nechápu, dyť to není vůbec potřeba…
Jsem bezmocný proti tomuto argumentu. Bohužel ale v handle mětodě volám metodu modelu, která kus cache maže.
Já to nepochopil, proto se ptám. Nevím jestli fyzicky něco mažeš v keši (to by nebylo dobré) nebo jestli pracuješ s objektem keše (pak je to v pořádku). Už mockrát se mi na lokále stalo, že skript běžel delší čas, ale vždy mi flashmessage fungovala.
- Ascaria
- Člen | 187
Když handle metoda trvá déle, tak se po redirectu flash zpráva
objeví.
Když pošlu ajax požadavek a v něm pak redirectuju, a trvá déle načtení
stránky po redirectu, tak se flash zpráva už neobjeví. Asi je to problém
mezi klávesnicí a židlí, já nevím.
edit: s cache pracuju jen s objektem nette\caching\cache
Editoval Ascaria (9. 5. 2012 16:58)
- Filip Procházka
- Moderator | 4668
Prosté řešení: Flash zprávu posílej až v momentě, kdy ti skončí tvoje náročná operace, nebude tedy potřeba ji prodlužovat platnost.
- Ascaria
- Člen | 187
HosipLan napsal(a):
Prosté řešení: Flash zprávu posílej až v momentě, kdy ti skončí tvoje náročná operace, nebude tedy potřeba ji prodlužovat platnost.
Můj problém je v tom, že ta náročná operace, po které pošlu flash msg, není náročná a zdržení je až po redirectu (dlouho se mi bez cache načítá datagrid, který by potřeboval předělat, ale není čas). Zdá se mi, že flash msg ze session z minulého requestu se nenačte hned při startupu, ale až těsně před šablonou, tudíž zdržení datagridem způsobí její „zahození“.
uestla napsal(a):
Moje řeč, co kdyby navíc během náročné operace došlo k chybě, ale flash message s desinformací o úspěchu už byla nastavená?
Tak hloupej zase nejsem, abych dával success msg před vlastní operaci. Ale toto je dobré vodítko k tomu, že u flash msg není žádný mechanizmus, který by je vyprázdnil. Příklad kdy se to může hodit:
Mám databázi a začnu transakci.
Vložím jeden řádek a oznámím vložení pomocí flash msg…
Druhý řádek a flash msg…
V třetím dojde k chybě, rollbacknu transakci a flash msg jsou nyní
desinformujcí.
Nyní jsem to řešil polem do kterého si ukládám msgs a při comitu to pole projedu foreachem a naskládám do flash msg – blah.
Editoval Ascaria (10. 5. 2012 10:23)
- Pitt
- Člen | 6
David Grudl napsal(a):
Flash message se ale nastavuje na 30 seconds
Pokud to dobre chapu tak pri redirectu je to 30 sekund jinak 3 sekundy
<?php
$this->getFlashSession()->setExpiration($this->response instanceof Responses\RedirectResponse ? '+ 30 seconds': '+ 3 seconds');
?>
Aneb neni nad dogmata ;)
- Filip Procházka
- Moderator | 4668
@Pitt: Má smysl dělat konstantu, když hodnotu použiješ jen jednou? ;)
- Pitt
- Člen | 6
HosipLan napsal(a):
@Pitt: Má smysl dělat konstantu, když hodnotu použiješ jen jednou? ;)
Tot otazka. Jednou jeden pan rekl „640K ought to be enough for
anybody.“
Chapu, ze doted 3 a 30 sec stacilo asi vsem a mit x-milionu ruznych konstant
v configu by bylo prehledne jak hell, ale treba mit moznost zmenit default neni
nikdy na skodu.