Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]Wyjątki try catch
blackroger
post
Post #1





Grupa: Zarejestrowani
Postów: 176
Pomógł: 0
Dołączył: 8.11.2008

Ostrzeżenie: (0%)
-----


Mam problem. Otóż mam takie coś:

  1. try
  2. {
  3. $con->beginTransaction();
  4.  
  5. $r = new Rejestracja();
  6.  
  7. $r->setLogin($request->getParameter('login'));
  8. $r->setHaslo($request->getParameter('haslo'));
  9. $r->setImie($request->getParameter('imie'));
  10. $r->setNazwisko($request->getParameter('nazwisko'));
  11. $r->setMiasto($request->getParameter('miasto'));
  12. $r->setMail($request->getParameter('mail'));
  13. $r->setData(date("Y-m-d"));
  14.  
  15. $r->save();
  16. $con->commit();
  17.  
  18. return $this->forward('register', 'thank_you');
  19. } catch(Exception $e)
  20. {
  21. $con->rollback();
  22.  
  23. return $this->forward('register', 'error');
  24. //throw($e);
  25. }
  26. //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.

Ten post edytował Ociu 7.09.2009, 11:12:18
Powód edycji: [Ociu]: dodałem tag.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Oh, moim zdaniem robisz błąd i pakujesz się w głupią sytuację, no ale jeśli tak bardzo chcesz:
  1. <?php
  2.  
  3.  
  4. try
  5. {
  6. //...
  7. $this->forward('register', 'thank_tou'); //Upierasz się w tym miejscu na forward, a powinien być redirect!
  8. }
  9. catch(PropelException $exception)
  10. {
  11. $this->forward('register', 'error');
  12. }
  13. catch(sfForwardException $exception)
  14. {
  15. throw $exception;
  16. }
  17.  
  18. ?>

Twoja akcja jest w tym momencie niesamowice długa, a wystarczyło:
  1. <?php
  2.  
  3. public function executeIndex(sfWebRequest $request)
  4. {
  5. $form = new RegisterForm();
  6. //$form->getWidgetSchema()->setNameFormat('rejestracja[%s]'); //Ewentulnie możesz dodać to tutaj, choć lepiej w formularzu.
  7. if($request->isMethod('post')
  8. {
  9. $form->bind($request->getParameter('rejestracja'));
  10. if($form->isValid())
  11. {
  12. $form->save(); //Taki zapis jeśli dziedziczy Twój formularz po sfFormPropel
  13. /**
  14. a jeśli nie to tak (łapanie wyjątku dodałem specjalnie dla Ciebie):
  15. $rejestracja = new Rejestracja();
  16. $rejestracja->fromArray($form->getValues(), BasePeer::TYPE_FIELDNAME);
  17. try
  18. {
  19. $rejestracja->save();
  20. }
  21. catch(PropelException $exception)
  22. {
  23. }
  24. */
  25. $this->getUser()->setFlash('notice', 'Rejestracja przebiegła pomyślnie');
  26.  
  27. $this->rediret('@register_thank_you');
  28. }
  29. else
  30. {
  31. $this->forward('register', 'error');
  32. }
  33. }
  34.  
  35. $this->setVar('form', $form);
  36. }
  37. ?>

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 18:38