Flashmessages v celém projektu nezávisle na presenterech
- kleinpetr
- Člen | 480
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
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“.
- enumag
- Člen | 2118
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
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
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
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
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)