Použití flashMessage – altermativy
- Budry
- Člen | 88
Zdravím,
je to spíše teoretická otázka, ale zajímalo by mě jakým způsobem
řešíte výpisy zpráv, varování a chyb v projektech.
Doposud, jsem si vystačil s $this->flashMessage() ale teď jsem narazil na otázku jak vyřešit například smazaní postu z databáze. Pokud se provede vypíše se Zelená (class ⇒ .success) tabulka se zprávou, že se vše povedlo a pokud ne má se vypsat červená (class ⇒ .error) s chybou.
Ať přemýšlím jak chci, přijde mi že na podobné případy klasické flashMessage nestačí nebo se mýlím.
Je nějaká možnost jak oddělit a nastylovat více různých stylů flashMessage a pak nějakej jednoduše vybírat mezi nimi? (Např. přidáním parametru do
$this->flashMessage(text, class)
Nebo to řešíte jiným způsobem?
Vím že vyřešit pomocí vlastních proměných, které bych vypisoval jen v určitou dobu by nebyl problém a tak mě spíše zajímá jestli se de flashMessage použít i nějak více „přispůsobitelně“
Předem díky
- Jan Voráček
- Člen | 90
Čau. Přesně takhle to funguje :) viz API. Jako výchozí typ (css class) máš ‚info‘, můžeš ale použít úplně cokoliv.
- hAssassin
- Člen | 293
moc ti nerozumim jak to myslis. To co pises je normalni pouziti
flashMessage
, kde class je tvuj retezec kterej muze byt jaky chces
ty a zalezi jak si to pak vykreslis sam. Ale to jiste vis. Jinak text (prvni
parametr) nemusi byt nezbytne jen retezec ale treba i pole. To pouzivam pri
editaci (smazani, aktivace apod) vice polozek najedou, kde vypisu ze
"polozka s #id '$ID' byla smazana/aktivovana"
apod. Jde jen o to
trochu si pohrat s vlastni vykreslenim tech flash messages v
@layout.latte
nebo kde je vykreslujes ;)
- Foowie
- Člen | 269
Používal jsem takový helper, respektive sklad výstupních hlášek … tam
si ten výpis pak můžeš přizpůsobit jak je libo. Nebo můžeš přepsat
Presenter::flashMessage()
tak, aby ti bral i jiné parametry, nebo
aby se typ transformoval, například jako má Nella .
- Foowie
- Člen | 269
No používám to spíše ve větších systémech kde potřebuju po jedné akci zobrazit třeba 10 hlášek …
- Presenter volá model / y, které vracejí ResultMessages
- Ten volá submodely které také vracejí ResultMessages
- Vždycky se sloučí $rm->addRM($this->udelejNeco());
- Pokud v nějakém submodelu během transakce nastane chyba, buď mohu vyhodit výjimku, nebo do $rm přidám chybu (v submodelu) a testuju jestli je v něm chyba (v modelu) (ale tak se obchází systém výjimek, což není moc dobré, ale záleží na situaci)
try {
... begin transaction
$rm->addInfo("První část transakce proběhla vpořádku", false); // false znamená, že tato hláška v případě chyby není platná
$rm->addRM($model->udelejNeco()); // zavolám submodel a přidám hlášky, submodel může vyhodit výjimku
$rm->addRM($model2->udelejNeco2())->throwOnError("ServiceException", false); // pokud submodel nevyhazuje výjimky a vrací ResultMessages, testuju zda-li neobsahuje chybu. Pokud obsahuje, vyhodím výjimku
... commit
} catch(ServiceException $e) { // pokud někde vznikne fatální výjimka, provedu rollback, vymažu neplatné hlášky a přidám výjimku
... rollback
$rm->clearUnpersistent()->addException($e);
}
return $rm;
V presenteru pak zobrazím hlášky jako $rm->show($this); Ty se přidají jako obyčejné flash messages, kde v ResultMessage si můžu upravit jak tyto hlášky upravím před přidáním (ale to je lepší dělat v BasePresenteru / BaseControl)
Editoval Foowie (27. 9. 2011 8:24)