RedirectingException

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

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) {
            ...
         }
redhead
Člen | 1313
+
0
-

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.

Editoval redhead (30. 8. 2009 15:48)

Martin Mates
Člen | 179
+
0
-

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

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);
}