Jak zobrazit flash message vytvorenou v komponente

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

Ahoj,

mam komponentu na vytvareni jednoduchych formularu (pouze jednoradkovy input s tlacitkem pro zmenu nastaveni), ktery po odeslani zpracuje data a je presmerovan na stejnou stranku, kde je formular zobrazen. Rad bych nastavil flashmessage, ktera da uzivateli informaci, ze doslo k nejake zmene. Tuto flash message vytvarim v metode, ktera se provede po zpracovani formulare. A zde jsem narazil na problem, ze tato flash message uz neni predana do hlavni sablony layout.latte a zustava pouze v sablone formulare.

"V tutorialech ":https://doc.nette.org/…n/components#… jsem narazil na informaci, ze komponenta ma vlastni uloziste flash zprav, nezavisle na presenteru, takze bych teoreticky chapal, proc se flash message nezobrazi.

Zajimalo by me, jestli je mozne, predat flash message z komponenty do presenteru, nebo aby se zobrazila. Nebo musim pro komponenty vytvorit vlastni zobrazovani flash messages?
(pokud bude potreba, dodam bloky kodu, ale myslim ze na tento dotaz nemaji vliv)

Oli
Člen | 1215
+
+4
-

Flash se ti zobrazí v takové komponentě, do které ji předáš. Pokud ji chceš předat presenteru tak to uděláš jednoduše:

$this->presenter->flashMessage('Hello');

Nebo pokud nechceš závislost na presenteru v komponentě, tak jako událost:

$this->onFlash('Hello');

A v presenteru:

$form = $this->form->create(); //instance EditForm (nebo jak to máš pojmenovaný)
$form->onFlash[] = function ($message) {
	return $this->flashMessage($message);
};
return $form;
Muhahe
Člen | 79
+
0
-

Oli napsal(a):

Flash se ti zobrazí v takové komponentě, do které ji předáš. Pokud ji chceš předat presenteru tak to uděláš jednoduše:

$this->presenter->flashMessage('Hello');

Nebo pokud nechceš závislost na presenteru v komponentě, tak jako událost:

$this->onFlash('Hello');

A v presenteru:

$form = $this->form->create(); //instance EditForm (nebo jak to máš pojmenovaný)
$form->onFlash[] = function ($message) {
	return $this->flashMessage($message);
};
return $form;,

Super, diky moc. Tohle jsem presne chtel vedet.

Editoval Muhahe (19. 9. 2016 8:32)

akadlec
Člen | 1326
+
+1
-

Pokud to chceš řešit komplexně tak třeba "takto ":https://github.com/…ash-messages jak o tom psal třecha Chemix