try { $con->beginTransaction(); $r = new Rejestracja(); $r->setLogin($request->getParameter('login')); $r->setHaslo($request->getParameter('haslo')); $r->setImie($request->getParameter('imie')); $r->setNazwisko($request->getParameter('nazwisko')); $r->setMiasto($request->getParameter('miasto')); $r->setMail($request->getParameter('mail')); $r->save(); $con->commit(); return $this->forward('register', 'thank_you'); } catch(Exception $e) { $con->rollback(); return $this->forward('register', 'error'); //throw($e); } //return $this->forward('register', 'thank_you');
Wszystko działa dobrze (bez throw()), gdy daje return $this->forward('register', 'thank_you'); poza blokiem try. Gdy jest w środku - pojawia się warning, dochodzi do poprawnego przekierowania a następnie catch przechwytuje i przekierowuje do error:
Dziękujemy!
Warning: Cannot modify header information - headers already sent by (output started at /usr/share/php/symfony/response/sfResponse.class.php:105) in /usr/share/php/symfony/response/sfWebResponse.class.php on line 335
Warning: Cannot modify header information - headers already sent by (output started at /usr/share/php/symfony/response/sfResponse.class.php:105) in /usr/share/php/symfony/response/sfWebResponse.class.php on line 349
Błąd transakcji!
Gdy używam throw() problem rozwiązuje się częściowo, gdyż warningi nie występują, ale w przypadku błędu blok catch przechwytuje wyjątek a throw wyrzuca błąd uniemożliwiając przeforwardowanie return $this->forward('register', 'error'); Ustawienie throw() przed czy po return forward nie załatwia sprawy.
Zaznaczam raz jeszcze, że problem występuje tylko i wyłącznie przy zastosowaniu try, catch...
Symfony Framework.