Uživatel existuje → flashMessage + vyplnění zadaných údajů

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

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

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)