![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie.
Mam pewien problem z oprogramowaniem formularza w SF 3.1 z uwagi na to, że trochę wyszedłem poza relacyjność bazy danych. Idea jest taka, że użytkownik ma możliwość dodawania wybranych produktów, zestawów produktów oraz harmonogramów dnia do "Ulubionych / Schowka". W związku z tym zostały utworzone 4 tabele: - product (przechowująca produkty) - kit (zestawy produktów) - workday (harmonogramy dnia) - clipboard (ulubione "elementy" użytkownika). Nie tworzyłem odrębnych tabel dla ulubionych produktów, ulubionych zestawów produktów, czy ulubionych harmonogramów dnia użytkownika. Tabela clipboard ma m.in. następujące pola: item_id (id produktu lub id zestawu produktów lub id harmonogramu dnia - w zależności od typu "elementu"; nie ma tu relacji z innymi tabelami) type (typ "elementu" dodanego do "Ulubionych" - product lub kit lub workday) user_id (id użytkownika) Teraz w "symfoniastym" formularzu chcę wyświetlić pole typu select (przechowujące typy elementów) i w zależności od wybranej opcji wyświetlać dodatkowe pole, które będzie pobierało z bazy listę produktów lub listę zestawów produktów lub harmonogramy dnia, a następnie wyświetlało opcje do wyboru (do bazy danych ma "lecieć" tylko id elementu). W templatce z widokiem formularza do pracy zostanie poproszony Ajax, aby w zależności od dokonanego wyboru generować dynamicznie nowe pole select. Dotychczas w ClipboardType.php mam coś takiego:
Czy ktoś bardziej doświadczony, podpowie czy to jest optymalne rozwiązanie i w jaki sposób zapisać id przykładowo wybranego produktu? Będę wdzięczny za wskazówki. Ten post edytował swiezak 21.06.2017, 01:28:02 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chodzi o formularze symfony to nie ma optymalnych rozwiązań - zawsze będzie jakiś problem (a najczęściej kilka), dlatego jeśli formularz:
- wymaga własnego modelu danych - wymaga specjalnego HTML/CSS - wymaga wewnętrznej logiki To lepiej obejść się bez symfony. Inaczej można spędzić kilka dni kombinując a efekt może być daleki od oczekiwań. Np. u Ciebie użyłeś eventu PRE_SET_DATA - to jest dobre, kiedy masz np. edycję użytkownika i w zależności od jego np. roli w bazie i chcesz dodać dodatkowe pole do formularza - jednak to nie zadziała, kiedy formularz ma być zależny od danych wprowadzonych bezpośrednio przez użytkownika (czyli następne pole zależne od poprzedniego). Tutaj wypadałoby użyć POST_SUBMIT, jednak w dokumentacji ładnie wyróżniono: Cytat At this point, you cannot add or remove fields to the form. - za dużo osób o to pytało ![]() Dlatego zostaje tylko PRE_SUBMIT, gdzie $event->getData() zwraca tylko prostą tablicę nazwa pola => wartość pola, jednak lepsze to niż nic. Kolejny problem (jeden z wielu) to taki, że event się wykona tylko wtedy gdy user kliknie "submit", a być może potrzebujemy pola także, gdy formularz jest w stanie początkowym (wyjściowym). Oczywiście można te problemy obejść/rozwiązać na parę sposobów, ale to już od developera zależy. Ja jeszcze nie widziałem prostego i wygodnego rozwiązania tego, ale próbuj ![]() |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 0 Dołączył: 21.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie za zainteresowanie moim tematem i wskazówki. Formularze w Symfony 3 to czasami koszmar, kiedy trzeba skorzystać z niestandardowych rozwiązań.
Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:44 |