![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem. Otóż mam takie coś:
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.
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 561 Pomógł: 72 Dołączył: 15.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Gdzieś niepotrzebnie wyrzucasz 'Dziękujemy!' od razu na ekran a symfony nie lubi echo w modelach i w akcjach
![]() -------------------- Nawet świnka może wejść na drzewo kiedy jest chwalona :)
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
Przenoszę do Framoworki.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Na początku napiszę tylko, że związek z symfony moim zdaniem jest mizerny.
Zakładam, że korzystasz z Propela, a kod który podałeś to kod Twojej akcji. Zakładam też, że klasa Rejestracja to klasa modelu, jeśli tak, to w takim razie otwórz sobie plik: lib/model/om/BaseRejestracja.php i poszukaj sobie metody save (zwróć uwagę na obsługę transakcji). Cały Twój problem bierze się z braku walidacji danych (lepiej gdybyś stworzył do tego formularz). Trafiają się pewnie dane, których baza nie chce przyjąć dlatego dostajesz wyjątek. Przy dobrej walidacji, wyjątek będzie tylko w sytuacji wyjątkowej i wtedy użytkownik może zobaczyć stronę błędu (dodatkowa obsługa wyjątku może zostać pominięta). Po poprawnym wykonaniu akcji z zapisem lepiej zrobić redirect, a nie forward. Co do ostrzeżenia - nie będę wróżył skąd się wzięło. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli chodzi o walidację to jest, była i będzie w lib/form. Nie będę jej całej tu umieszczać, chyba że ktoś stwierdzi, że to może pomóc w rozwiązaniu problemu. Przy redirect problem nie występuje. Zastanawia mnie tylko dlaczego przy forward dzieją się takie dziwne rzeczy i to tylko w przypadku zastosowania try,catch...
Przed chwilą znalazłem link na forum: http://forum.php.pl/lofiversion/index.php/t124562.html Jest tu poruszany dokładnie ten sam problem, jakkolwiek nie został on tu również rozwiązany (przyczyna warningu jest nieznana). Ten post edytował blackroger 7.09.2009, 20:21:06 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Tylko co z tego, że ta walidacja jest w jakimś tam folderze, skoro w podanym przez Ciebie kodzie nie jest ona wykorzystana?!
W podanym przez Ciebie wątku problem nie został rozwiązany z przyczyn oczywistych, autor nie podał informacji o tym jaki dostaje wyjątek. Obaj chcecie złapać wszystkie wyjątki, co nie ma najmniejszego sensu. Symfony jest skonstruowane w ten sposób, że forward jest wymuszony przez wyjątek: sfForwardException. Ty go przechwytujesz i forward się nie odbywa, a więc winne jest to o czym pisałem między innymi w poprzednim poście. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak dla wyjaśnienia sprawy z walidacją:
Nie będę pokazywał registerForm bo jest za długi. Dzięki destroyerr za zainteresowanie tematem. Jeżeli w symfony forward wymusza wyjatek przekierowania sfForwardException to jak teraz zrobić aby przechwytywać wszystkie wyjątki z wyjątkiem niego. Wiem, że można sprawę załatwić na 10 innych sposobów ale mnie interesuje konkretnie ten... ![]() Ten post edytował blackroger 8.09.2009, 10:13:59 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
A po co wszystkie? wysterczy jeden (dla ułatwienia: bodajże PropelException)...
Ten post edytował -=Peter=- 8.09.2009, 10:28:13 -------------------- |
|
|
![]()
Post
#9
|
|
![]() 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:
Twoja akcja jest w tym momencie niesamowice długa, a wystarczyło:
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 176 Pomógł: 0 Dołączył: 8.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok...dzięki za odpowiedzi...wiem, że może głupio się upierałem ale takie rozwiązanie znalazłem w pewnej książce (dla symfony 1.1) i po prostu wywnioskowałem, że autor zamieścił kod, który zawiera błędy i nie jest stricte edukacyjny
![]() |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Mały OT: nie wiem jak ktoś mógł wydać książkę dla symfony 1.1. Już sam pomysł na takie wydawnictwo sugeruje niepełną znajomość tematu. Jeśli faktycznie autor wypisuje tam takie rzeczy, to tylko potwierdza się moje zdanie.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 04:40 |