Registracia uzivatelov, problem s vynimkami
- cuchi
- Člen | 17
Zdravim,
pouzivam najnovsie Nette (z 12.12.2011) a PHP 5.3.
Snazim sa vytvorit si vlastny registracny formular. Cast som odkopiroval od
prihlasovacieho formulara avsak pri samotnej registracii nastava ten problem, ze
ked sa nehodi vynimka duplicity tak sa nevykona redirect. Toto je moja prva
skusenost s vynimkami tak budte prosim ohladuplny :). Skusal som tam dosadit aj
NS\AuthenticationException namiesto Exception a vtedy to slo podla ocakavani,
ale nieco mi hovori ze NS\AuthenticationException su vynimky urcene pre
prihlasovanie :)
public function RegisterFormSubmitted($form)
{
try {
$values = $form->getValues();
$row = $this->model->getUsers()->where(array('username' => $values->username))->count();
if($row > 0) {
throw new Exception("Zadane meno uz existuje, zvolte ine.");
}
unset($row);
$this->redirect('Homepage:');
} catch (Exception $e) {
$form->addError($e->getMessage());
}
}
- Filip Procházka
- Moderator | 4668
… ked sa nehodi vynimka duplicity tak sa nevykona redirect …
To je přeci očekávané chování, ne? Nebo chceš, aby se uživateli stránka přesměrovala a musel formulář vyplňovat znovu?
- cuchi
- Člen | 17
HosipLan napsal(a):
… ked sa nehodi vynimka duplicity tak sa nevykona redirect …
To je přeci očekávané chování, ne? Nebo chceš, aby se uživateli stránka přesměrovala a musel formulář vyplňovat znovu?
Samozrejme, takto to funguje pri prihlasovani. Jednoducho vyplnis udaje, odosles a pokial sa nehodila vynimka, presmerovalo ta to niekam inam.
Ani pri prihlasovani nie je nutnost vyplnat formular viac krat pokial sa samozrejme nehodila vynimka.
gmvasek napsal(a):
Zachytáváš všechny výjimky, tedy i AbortException, kterou vyhazuje redirect. Uprav catch větev.
Mohol by si mi prosim napisat ako to upravit, resp. ak je to nutne, ako napisat vlastnu vynimku (kam ju ulozit)?
- duke
- Člen | 650
Můžeš vyhodit a zachytávat např. \RuntimeException nebo si na to napsat svou vlastní výjimku, která dědí buď z této, nebo přímo z \Exception. Jde o to, abys nezachytával přímo \Exception, protože redirektovací metoda sama vyhazuje výjimku Nette\Application\AbortException za účelem ukončení činnosti presenteru, a pokud zachytáváš přímo \Exception (ze které Nette\Application\AbortException dědí), pak zachytneš i tuto a narušíš tento mechanismus životního cyklu presenteru.
Vlastní výjimku napíšeš např. takto:
class UsernameDuplicityException extends \RuntimeException
{
}
Kam ji uložíš je celkem jedno. Jde o to, aby ji našel robotLoader.
Editoval duke (26. 12. 2011 20:24)
- cuchi
- Člen | 17
duke napsal(a):
Můžeš vyhodit a zachytávat např. \RuntimeException nebo si na to napsat svou vlastní výjimku, která dědí buď z této, nebo přímo z \Exception. Jde o to, abys nezachytával přímo \Exception, protože redirektovací metoda sama vyhazuje výjimku Nette\Application\AbortException za účelem ukončení činnosti presenteru, a pokud zachytáváš přímo \Exception (ze které Nette\Application\AbortException dědí), pak zachytneš i tuto a narušíš tento mechanismus životního cyklu presenteru.
Vlastní výjimku napíšeš např. takto:
class UsernameDuplicityException extends \RuntimeException { }
Kam ji uložíš je celkem jedno. Jde o to, aby ji našel robotLoader.
Vyborne, toto som potreboval. Vlastnu vynimku si teraz pisat nebudem ale do buducna budem vediet. Zatial budem pouzivat RuntimeException. Dakujem za rychlu odpoved.