Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF2][Symfony2][Symfony]Obsłużenie wyjątku przy wstawianiu rekordu z kluczem unique
amii
post
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Mam tabelę z kluczem unique. Teraz kiedy z poziomu formularza próbuje dodać rekord, który już jest w bazie dostaje brzydką stronę 500 Internal server error a chciałbym to jakoś obsłużyć.

Wydawało mi się, że takie coś powinno przechwycić ten wyjątek ale nie działa, testowo sprawdzałem to umieszczając die z komunikatem:
  1. try {
  2. $em->persist($klasaAdresowa);
  3. die('ehh'); //umiesicilem testowo tu sie wyswietla
  4. $em->flush();
  5. die('ehh'); //umiesicilem testowo tu sie NIE wyswietla
  6. }
  7. catch (Exception $e) {
  8. die('ehh'); //umiesicilem testowo tu sie NIE wyswietla
  9. // jaka wiadomosc
  10. $this->get('session')->getFlashBag()->add(
  11. 'error',
  12. 'Wystąpił błąd rekord nie został zapisany!'
  13. );
  14. }


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
ziolo
post
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 20
Dołączył: 17.01.2009
Skąd: Kraków

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


Walidujesz formularz ?

Dodaj do encji constraint:

http://symfony.com/doc/current/reference/c...iqueEntity.html
Go to the top of the page
+Quote Post
amii
post
Post #3





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Do przechwycenia wyjątku potrzeba było dać catch (\Exception $e) powstał jednak inny problem. Nie mogę przekazać informacji poprzez flashBag mój kod wygląda tak:

  1. if ($form->isValid()) {
  2. // perform some action, such as saving the task to the database
  3. $klasaAdresowa = $form->getData();
  4.  
  5. try {
  6. $em->persist($klasaAdresowa);
  7. $em->flush();
  8. }
  9. catch (\Exception $e) {
  10. // jaka wiadomosc
  11. $this->get('session')->getFlashBag()->add(
  12. 'error',
  13. 'Wystąpił błąd rekord nie został zapisany!'
  14. );
  15.  
  16. // jaka ikona do wiadomosci
  17. $this->get('session')->getFlashBag()->add(
  18. 'error',
  19. 'error'
  20. );
  21. return $this->forward('MyBundleCMSBundle:KlasyAdresowe:index');
  22. }
  23.  
  24. // jaka wiadomosc
  25. $this->get('session')->getFlashBag()->add(
  26. 'notice',
  27. 'Dane klasy adresowej zostały poprawnie zapisane!'
  28. );
  29.  
  30. // jaka ikona do wiadomosci
  31. $this->get('session')->getFlashBag()->add(
  32. 'info',
  33. 'info'
  34. );
  35.  
  36. return $this->redirect($this->generateUrl('my_bundle_klasyadresowe_index'));
  37. }



Kod bazowego szablonu widoku, gdzie wyświetlają się komunikaty zwrotne:
  1. {% block flash %}
  2. <div id="flash-messanger" class="{% for classMessage in app.session.flashbag.get('info') %}{{classMessage}}{% endfor %}">
  3. {% for flashMessage in app.session.flashbag.get('notice') %}
  4. {{ flashMessage }}
  5. {% endfor %}
  6. </div>
  7. {% endblock %}


Przypuszczalnie to kwestia dwóch przekierowań i w efekcie zresetowania flashBag jakie następują po przechwyceniu wyjątku, pytanie jak to obejść ? Zamiast forward próbowałem też redirect

Ten post edytował amii 7.08.2014, 08:58:26


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


A gdzie tu masz 2 przekierowania questionmark.gif


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
amii
post
Post #5





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Z przekierowaniami jest jednak ok bo zasugerowałem się konsolą. Tam były wysyłane 2 requesty jeden to było wykonanie samej akcji z formularza a drugi redirect z kodu powyżej więc ok.
Tylko czemu jeśli ustawiam wiadomości flash już po tym pierwszym request nie jest on widoczny ?

EDIT: już nieważne, problem rozwiązany

Ten post edytował amii 7.08.2014, 12:05:22


--------------------
gry flash online
Dobry hosting i tanie odnowienia domen firma: masternet.
Zarabianie bez wysiłku na domenach bez ruchu: prolink.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 07:39