Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Doctrine] Formularze, przechowanie zawartości pola "entity"
rcetra
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.12.2011

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


Jest sobie kod, który ma za zadanie wziąc dane z formularza przy wywołaniu POST i zapisać do sesji.
Kiedy już ma zapisane dane, ma je wykorzystać jako dane domyślne dla formularza.
Zadanie banalne, ale próbuję żeby się nie napisać zbyt wiele i nie tworzyć od nowa obiektów, po prostu te dane zserializować.
Niestety, pojawia się błąd "Entities passed to the choice field must be managed 500 Internal Server Error - FormException".
Czy ktoś zna jakiś sposób na zgrabne przeniesienie tych danych np. do następnej strony?

Fragment z kontrolera z formatką:
  1. $session = $this->get('session');
  2. $session->start();
  3. $defaultData = $session->get($this->name_session_data, array());
  4. if(is_string($defaultData)){
  5. $defaultData = unserialize($defaultData);
  6. }
  7. // Formatka do filtrowania
  8. $filter_form = $this->createFormBuilder($defaultData)
  9. ->add('lang', 'entity', array(
  10. 'class' => 'BDKTranslatorBundle:TranslatorLang',
  11. 'multiple' => true,
  12. 'expanded' => true,
  13. 'label' => 'Język',
  14. 'required' => false
  15. ))
  16. ->add('app', 'entity', array(
  17. 'class' => 'BDKTranslatorBundle:TranslatorApp',
  18. 'multiple' => true,
  19. 'expanded' => false,
  20. 'label' => 'Aplikacja',
  21. 'required' => false
  22. ))
  23. ->add('name', 'text', array(
  24. 'label' => 'Nazwa tekstu',
  25. 'required' => false
  26. ))
  27. ->add('desc', 'text', array(
  28. 'label' => 'Opis tłumaczenia tekstu',
  29. 'required' => false
  30. ))
  31. ->add('body', 'text', array(
  32. 'label' => 'Tekst tłumaczenia tekstu',
  33. 'required' => false
  34. ))
  35. ->add('without_translation', 'checkbox', array(
  36. 'label' => 'Bez tłumaczenia',
  37. 'required' => false,
  38. ))
  39. ->getForm();
  40.  
  41. if ($request->getMethod() == 'POST') {
  42. $filter_form->bindRequest($request);
  43. $filter_data = $filter_form->getData();
  44. $session->set($this->name_session_data, serialize($filter_data));
  45. $session->save();
  46. }


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
MickDev
post
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 2
Dołączył: 16.03.2010
Skąd: ~Sanok

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


Cześć,

Wydaje mi się, że jest to spowodowane jakimś błędem w BDKTranslatorBundle:TranslatorLang lub BDKTranslatorBundle:TranslatorApp.
Go to the top of the page
+Quote Post
adbacz
post
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Na przesłanie danych do następnej strony (nawet bez przekazywania danych post, wystarczy zwykłe przekierowanie) to masz przecież Flashes w Symfony2. W dokumentacji jest wszystko ładnie napisane jak to wykorzystać. Możesz sobie zapisać pod jakąś nazwą całą tablicę post i wysłać ją jako jednorazową wiadomość session flash.
Go to the top of the page
+Quote Post
rcetra
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.12.2011

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


Cytat(adbacz @ 15.01.2012, 00:39:10 ) *
Na przesłanie danych do następnej strony (nawet bez przekazywania danych post, wystarczy zwykłe przekierowanie) to masz przecież Flashes w Symfony2. W dokumentacji jest wszystko ładnie napisane jak to wykorzystać. Możesz sobie zapisać pod jakąś nazwą całą tablicę post i wysłać ją jako jednorazową wiadomość session flash.

Potrzebuję mieć te dane nie tylko na jedno kliknięcie jak podaje http://symfony.com/doc/2.0/book/controller...#flash-messages
Formularz znajduje się nad listą. W zasadzie jest formularzem wyszukiwania. Chcę, żeby po edycji, ktoś wrócił dokładnie w to samo miejsce, z którego kliknął (kliknęła) coś na liście. Oprócz stanu formularza chcę też zapamiętać adres (ze zmiennymi GET) i ewentualnie przekierować go na dokładnie tą samą stronę.
Sądzę, że to moze mieć związek z połączeniami do bazy, ale chyba już nic na to nie poradzę w takim razie. Sądziłem, że ktoś już miał rozwiązany ten jak się zdaje trywialny problem. No nic, zrobię na piechotę, też tak można ;-)

Ten post edytował rcetra 16.01.2012, 10:01:56
Go to the top of the page
+Quote Post
adbacz
post
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Wracanie na ostatnią stronę - Ja ma to rozwiązane tak, że z każdym requestem zapisuję do ciacha użytkownikowi jego ostatni adres, oprócz kilku. Potrzebne mi to, by przekierowac użytkownika na ostatnią odwiedzaną przez niego stronę, gdy ten się zaloguje lub wyloguje.

Co do przechowywania wiadomości - nie możesz zwiększyć czasu wygaśnięcia sesji i w niej wszystkiego co potrzeba? Wg mnie najprostrzy sposób. No chyba, że Ci to jakoś nie podchodzi no to już musisz albo czekac na czyjeś pomysły albo samemu myśleć.
Go to the top of the page
+Quote Post
rcetra
post
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 16.12.2011

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


Cytat(adbacz @ 16.01.2012, 17:56:20 ) *
Wracanie na ostatnią stronę - Ja ma to rozwiązane tak, że z każdym requestem zapisuję do ciacha użytkownikowi jego ostatni adres, oprócz kilku. Potrzebne mi to, by przekierowac użytkownika na ostatnią odwiedzaną przez niego stronę, gdy ten się zaloguje lub wyloguje.

Dzięki za pomysł, może go wykorzystam. Z tym formularzem poradziłem sobie na piechotę. Przed zapisem zamieniam na czystą tablicę z identyfikatorami z listy a kiedy mam go pokazać wracam do postaci obiektów. W sumie proste, tylko te dodatkowe zapytania mnie męczą. Niestety, nie ma chyba innego rozwiązania.
Go to the top of the page
+Quote Post

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: 23.09.2025 - 02:20