Použití flashMessage – altermativy

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

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

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

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

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 .

hAssassin
Člen | 293
+
0
-

Foowie > ten sklad vystupnich hlasek nevypada vubec spatne. Muzu se zeptat, jak s tim pak pracujes v Nette? Myslim hlavne pridani hlasky v presenteru a pak nejaky to vykresleni vsech hlasek v sablone. Diky.

Foowie
Člen | 269
+
0
-

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)

Budry
Člen | 88
+
0
-

Jan Vondráček, díky to jsem přesně potřeboval

Omlouvám se, asi jsem přehlídl možnost přidat vlastní class u flashmessag.

Díky všem