Uživatel existuje → flashMessage + vyplnění zadaných údajů
- maarlin
- Člen | 207
Řeším asi triviální problém, na který jsem zde na fóru ani
v QuickStart a jinde nenašel řešení…
Mám komponentu – formulář – na registraci uživatele.
Metoda, která zpracovává data by měla správně ověřit, zda uživatel
třeba existuje, než jej vytvoří a pokud už existuje (v tabulce existuje
třeba zadaný e-mail), aby vyhodil flashMessage, ALE především aby zase
zpátky vyplnil všechna zadaná pole, které měl uživatel vyplněná a
nemusel to vyplňovat znova (kromě passwords samozřejmě).
Ideální by bylo, pokud by existovalo nějaké řešení, které by se dalo
provázat třeba s jQuery, resp. obecně nějakým validačním
JavaScriptem – tedy píšu postupně username a u pole napravo se mi bude od
3.znaku při každém onkeyup zjišťovat, zda username existuje
v databázi…
Nevěřím, že takovouto věc, kterou osobně řeším asi na 75% webů, které
mají formuláře, Nette nemá vymyšlenou…
- Ondřej Mirtes
- Člen | 1536
K tomuto neslouží flashMessage, ale $form->addError.
Zpracovávací metoda by měla vypadat nějak takto:
public function formSubmitted(AppForm $form) {
try {
$this->model->registerUser($form->values);
$this->flashMessage('Úspěšně zaregistrován!'); //v případě úspěchu, pokud model vyhodí Exception, sem se kód nedostane
$this->redirect('this'); //Post/Redirect/Get pattern
} catch (SomeModelException $e) {
$form->addError($e->getMessage());
}
}
Model by měl v případě neúspěchu (např. již existující login) vyhodit nějakou Exception (já používám např. IOException) a tu pak metoda, která model volá, zachytí a předá formuláři zprávu té výjimky. Zobrazí se formulář s errorem nad ním (který mám nastylovaný, že vypadá prakticky jako flash zprávička) a předvyplněnými údaji.
Editoval Ondřej Mirtes (25. 12. 2009 13:43)