Flash zprávy a jejich omezení na 3 vteřiny

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

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

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

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)

Ot@s
Backer | 476
+
0
-

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…

Ascaria
Člen | 187
+
0
-

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

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

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

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.

uestla
Backer | 799
+
0
-

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á?

LM
Člen | 206
+
0
-

Nešlo by nastavit expirace prvně třeba na minutu a teprve až při zobrazení flash zprávy v dalším requestu nastavit na 3s? přece jen k prodlevě může dojít i kvůli pomalému spojení.

newPOPE
Člen | 648
+
0
-

Skor by som sa priklonil k tomu nechat to tak ako to je + pridat moznost nastavit si cas napr. v configu (BasePresenteri etc…)

Ascaria
Člen | 187
+
0
-

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)

David Grudl
Nette Core | 8228
+
0
-

Flash message se ale nastavuje na 30 seconds

Pitt
Člen | 6
+
0
-

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

@Pitt: Má smysl dělat konstantu, když hodnotu použiješ jen jednou? ;)

Pitt
Člen | 6
+
0
-

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.