RedirectingException
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- Martin Mates
 - Člen | 179
 
Hraju si s jednou funkcí, která zpracovává uložení obrázku přes formulář. Když to zkusím celé dát do try bloku, tak to pokaždé zachytí vyjímku RedirectingException. Když dám ten try/catch blok pryč, tak vše funguje jako po másle. Obrázek se uloží a přesměrování se provede. Nevíte někdo, co to může způsobovat?
<?php
public function uploadSubmitted(Form $form) {
        try {
            $img = $form['fotka']->getValue()->getImage();
            ...
            $img->save(WWW_DIR . '/uploaded/' . ... . $user . '.jpg');
            $this->redirect('uploadOk');
        } catch(Exception $e) {
            Debug::dump($e);
        }
    }
?>
Vyjímka:
object(RedirectingException) (6) {
   "message" protected => string(64) "http://127.0.0.1/.../upload/upload-ok/?city=chrudim&x=1&y=2"
   "string" private => string(0) ""
   "code" protected => int(303)
   "file" protected => string(71) "F:\Program Files\wamp\www\...\libs\Nette\Application\Presenter.php"
   "line" protected => int(691)
   "trace" private => array(13) {
      0 => array(6) {
         "file" => string(80) "F:\Program Files\wamp\www\...\libs\Nette\Application\PresenterComponent.php"
         "line" => int(345)
         "function" => string(11) "redirectUri"
         "class" => string(9) "Presenter"
         "type" => string(2) "->"
         "args" => array(2) {
            ...
         }
				
- Martin Mates
 - Člen | 179
 
redhead napsal(a):
metoda redirect vyhazuje tuto výjimku úmyslně. Řešením je dát redirect pryč z try blocku (za něj) a nepoužívat catch (Exception $e), ale nějakou konkretní exception.
Díky díky. Ptal jsem se spíš pro zajímavost, jestli nedělám někde chybu.

- David Grudl
 - Nette Core | 8285
 
Nebo lze všechny AbortException (RedirectingException je jeden z několika potomků) znovuvyhodit.
        try {
            $img = $form['fotka']->getValue()->getImage();
            ...
            $img->save(WWW_DIR . '/uploaded/' . ... . $user . '.jpg');
            $this->redirect('uploadOk');
        } catch(AbortException $e) {
            throw $e;
        } catch(Exception $e) {
            Debug::dump($e);
        }