Redirect po odoslani formularu (NAbortException)
- roarbb
- Člen | 29
Po odoslani formularu volam funkciu editSite() v ktorej chcem ulozit data z formularu do databazy a nasledne redirectnut na iny view. Pri vykresleni formularu vsak dostanem NAbortException. Nechapem prosim o pomoc.
Funkcia editSite() vyzera nasledovne:
private function editSite($form) {
$data = $form->getValues();
dibi::query('UPDATE [site] SET ', $data, 'WHERE [id] = %i', $data->id);
$this->redirect("Site:default");
}
Ak zakomentujem riadok $this->redirect("Site:default");
Vsetko je OK len ma neredirectne.
Dakujem za pomoc.
- Nox
- Člen | 378
Nette implementuje redirect pomocí AbortException … nezachytávej jakékoli výjimky, jen ty o které máš zájem/můžeš s nimi něco dělat (asi se to takto má dělat tuším)… pokud fakt není zbytí, tak:
<?php
try{ /*...*/ }
catch(AbortException $e){ throw $e; }
catch(Exception $e){ /* ... */ }
?>
Editoval Nox (21. 7. 2011 0:52)
- roarbb
- Člen | 29
Takto?
private function editSite($form) {
try{
$data = $form->getValues();
dibi::query('UPDATE [site] SET ', $data, 'WHERE [id] = %i', $data->id);
$this->redirect("Site:default");
} catch (Exception $e) {
$form->addError($e->getMessage());
}
}
Lebo to tiez nefunguje, aspon uz renderuje stranku s formularom, po odoslani ulozi do db ale neredirectne. Skus konkretnejsie prosim.
- Nox
- Člen | 378
Netuším jak konkrétněji – doslova jsem psal že Nette používá AbortException* a tudíž ji zachytávat nemáš, ale pokud bys fakt chtěl zachytávat vše (kromě AbortException!), použij konstrukci, kterou jsem napsal.
Neredirectuje se, protože ta AbortException způsobuje redirect, je k tomu určena
*) která je potomkem Exception tudíž catch Exception zachytí i ji!
- roarbb
- Člen | 29
Tak uz som to vyriesil :)
Ziadne exceptions som nikde nezachytaval naschval, preto to bolo divne. Cely problem bol v tom, ze som formular odosielal pomocou
$form['save']->onClick[] = callback('this', 'editSite');
to bolo zle
Takto je to dobre:
$form->onSuccess[] = array($this, 'editSite');
Dakujem za pomoc.
Editoval roarbb (21. 7. 2011 8:50)