Flashmessages v celém projektu nezávisle na presenterech

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

Ahoj,

mám model, který komunikuje s api s nějakým serverem a stará se o requesty. Nyní potřebuji monitorovat nějaké messages, ale nevím jak správně implementovat. Vím, že flashmessages by se měly používat jen v presenterech nezávisle na modelech. Jenže mám např. 20 presenterů a v každém např. 5 objektů tohoto modelu, takže odchytávat z modelu do presenteru mi přijde jako špatně. Jde o to, že když vrácený response z api bude obsahovat nějakou msg tak ji vypsat jako flashmessage.. Napadlo mě vytvořit nějakou session v rámci celé aplikace a v layoutu ji vypisovat, obdobně jako flashmessage. V tu chvíly bych mohl kdekoliv vbyhodit jakoukoliv zprávu uživateli.

Co si o tom myslíte ?

Pavel Kravčík
Člen | 1183
+
0
-

Tabulka → api_messages. Modely pracují jen s repositářem té tabulky a přidávají do ní řádky.

BasePresenter může mít funkci, která bude tu tabulku kontrolovat a zobrazovat ty nové. Ty zobrazené můžeš mazat nebo si nastavovat nějaký sloupec na „zobrazeno“.

kleinpetr
Člen | 480
+
0
-

Není zbytečné kvůli tomu vytvářet tabulku ? Nebude přeci jen lepší pro tento účel ta session ?

Editoval kleinpetr (1. 6. 2015 10:36)

enumag
Člen | 2118
+
0
-

Tabulka je zbytečná, úplně stačí služba. Asi to taky začnu používat protože flash messages pro každou komponentu se mi vůbec neosvědčily takže vždycky volám $this->getPresenter()->flashMessage(...);. Přesto vyhazovat flash message mimo komponenty… do toho nejdu. :-)

Editoval enumag (1. 6. 2015 11:27)

Pavel Kravčík
Člen | 1183
+
0
-

Tak jsem to asi jen špatně pochopil, myslel jsem, že máš nějaké API, které funguje někde na pozadí a občas by mělo vyhodit zprávu uživateli, což se může dít nezávisle na akcích uživatele. Jinak má @enumag nejjednodušší cestu.

kleinpetr
Člen | 480
+
0
-

Pochopil jsi to správně, že komunikace s nějakým serverem běží na pozadí a někdy je třeba vyhodit nějaké hlášení, které mi server vrátí. A tabulka je asi výhodná z hlediska toho, že si mohu nastavovat kdy byly zprávy zobrazeny a ještě s tím potom pracovat. Zatím ale nemám projekt připojený na žádnou db, takže jsem to zatím na rychlo udělal pomocí session, kterou procházím v layoutu stejně jako flashmessages. Každopádně díky za rady

akadlec
Člen | 1326
+
0
-

Dovolím si zde zmínit jak jsem unifikoval flashky u sebe na projektu. Obecně mě štvalo jak je to celé roztříštěné flashky v presenteru/komponentě/formu. Co jsem chtěl já, je jedno místo kde se ty zprávy odbaví a zobrazí. Navíc jsem řešil problém když dojde vyvolání flashky v modal okně tak sem chtěl aby se chovaly trochu jinak. Tohle mě donutilo udělat extension která s těmi flashkami pracuje

Výsledkem je služba které předáváš zprávičky co se mají uložit/zobrazit a pak tam máš komponentu která se stará o jejich zobrazení. Flashky se ukládají do session a mažou se z ní až po úspěšném zobrazení/načtení. Takže můžeš si je tam nastřádat jako do fronty pokud ti proběhne více procesů na pozadí a pak je všechny zobrazit.

Je tam u toho i lehký návod jak je použít, dají se rozšířit o vlastní prvky. Je tam i podpora translatoru pro překlady, atd. Tak kdo chce může zkusit ipub/flash-messages

Myiyk
Člen | 321
+
0
-

Chceš být nezávislý na presenterech, tak ty flash message vykresluj u komponenty.
A jestli je potřebuješ vykreslovat u presenteru, tak chtě nechtě jsi na něm závislý.

Ukládat si zprávy, které chceš odeslat do pole.
A v moment připojení komponenty k presenteru je pošleš přes presenter.

Případně jestli je komponenta naprogramována, že v době provádění kódu je již k presenteru připojena, tak po pošli přímo.
$this->presenter->flashMessage()

Editoval Myiyk (21. 6. 2015 18:41)

akadlec
Člen | 1326
+
0
-

tady bych si dovolil oponovat, pokud nechceš tak na tom presenteru závislý nebuděš, viz můj post výše, flashky se dají řešit i jinak, samostatně.