Jak používat vlastní chybové zprávy?
- Tepster
- Člen | 28
Zdravím,
nechci používat $this->flashMessage()
nebo
$form->addError()
, protože potřebuji do šablony předávat
více informací o zprávě, než jen text a type. Vytvořil jsem si tedy
třídu Message
s metodou error($text, $elementId)
,
kde $elementId
je id html prvku, na který je vyvolána zpráva.
Pak používám vlastní třídu Form
, která dědí z
Nette\Application\UI\Form
a v metodě submit()
vytváří z formulářových errorů objekty Message
. V budoucnu
si přidám do BasePresenter
u něco jako
addErrorMessage(...)
a addSuccesMessage(...)
.
Teď mám ale problém: Kam mám ty objekty Message
dávat?
A potom, kde je vykreslovat? Mohu je renderovat třeba v metodě
afterRender()
v BasePresenteru
, ale to pak budu muset
to damé dělat někde v těch formulářích v submit()
…
Nebo to je celé špatně a tyhle věci se dělají jinak? …
Díky za odpovědi!
- Oli
- Člen | 1215
Prvně se zeptám, k čemu to potřebuješ? Možná se mýlím, ale flashMessage a addError chápu, jako seznámení uživatele s nějakou interakcí s aplikací. Úspěšné uložení formuláře, nevyplněné jméno, aplikace spadla, … K tomu všemu mě zatím vždycky stačil jen pouhej text. On stejně nic víc vědět nepotřebuje. Veškerou ostatní logiku okolo toho problému řeším v presenteru/komponentě.
Proto jestli například zpracováváš nějakou logiku okolo toho v šabloně, tak to pravděpodobně děláš špatně. :-)
- Xethilos
- Člen | 19
Jestli chceš více informací ve flashMessage, tak přepsat na toto.
public function flashMessage($message, $parameter, $type = 'info') {
$id = $this->getParameterId('flash');
$messages = $this->getPresenter()->getFlashSession()->$id;
$messages[] = $flash = (object) array(
'message' => $message,
'type' => $type,
'parameter' => $parameter
);
$this->getTemplate()->flashes = $messages;
$this->getPresenter()->getFlashSession()->$id = $messages;
return $flash;
}
Editoval Xethilos (11. 11. 2014 7:16)
- Tepster
- Člen | 28
Oli napsal(a):
Prvně se zeptám, k čemu to potřebuješ? Možná se mýlím, ale flashMessage a addError chápu, jako seznámení uživatele s nějakou interakcí s aplikací. Úspěšné uložení formuláře, nevyplněné jméno, aplikace spadla, … K tomu všemu mě zatím vždycky stačil jen pouhej text. On stejně nic víc vědět nepotřebuje. Veškerou ostatní logiku okolo toho problému řeším v presenteru/komponentě.
Proto jestli například zpracováváš nějakou logiku okolo toho v šabloně, tak to pravděpodobně děláš špatně. :-)
- Barva zprávy. Ano, to se dá řešit pomocí toho „type“ u flashMessage.
- Kde se má zpráva zobrazit. Chci třeba chybové zprávy u formulářů zobrazovat přímo u jednotlivých inputů a to v šabloně nedokážu zajistit, když tam nevím, jaký input daný error vyvolal.
- Někdy chci, aby zpráva po 5 sekundách zmizela.
- Další vizuální vlastnosti zprávy…
- Michal Vyšinský
- Člen | 608
ono se dá udělat toto:
$flash = $this->flashMessage('text');
$flash->color = 'red';
$flash->block = 'header';
$flash->timeout = 5;
$flash->...
Je to asi nejjednodušší řešení bez zásahu do funkčnosti flash message. Bylo by ale lepší si tyto vlastnosti zapouzdřit do objektu a přepsat funkci flashMessage aby vytvářela ten tvůj objekt.