![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 318 Pomógł: 76 Dołączył: 27.12.2011 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
Przyszło mi pracować na gotowym projekcie w Symfony 2.2, bez możliwości aktualizacji. Niestety nie mam żadnego doświadczenia w SF2, a zaistniała potrzeba, aby zmodyfikować formularz. Aktualnie mam w formularzu pole typu choice w którym atrybut choices wypełniam płaską tablicą z województwami
Całość jest przechowywana w bazie danych(model doctrine), który automatycznie zaznacza elementy wybrane(podczas edycji), a lista województw jest wpisana na sztywno w configu. Jako zadanie mam stworzyć możliwość wyboru miast dla każdego województwa. Miasta przechowywane będą w bazie danych i zawierać będą: ID(auto increment), ID_WOJEWÓDZTWA, ID_MIASTA(Numeracja od 1 dla każdego województwa), NAZWA_MIASTA. Nie mogłem znaleźć gotowego rozwiązania w internecie(które nadawałoby się do moich potrzeb) do budowy "drzewa" checkboxów. Wizualnie w mojej głowie prezentuje się następujący obraz(wizualny): Kod - [ ] Śląskie -- [ ] Katowice -- [ ] Dąbrowa Górnicza -- [ ] Sosnowiec -- [ ] Będzin - [ ] Mazowieckie -- [ ] Warszawa -- [ ] Radom -- [ ] Płock -- [ ] Ostrołęka Wpadłem na pomysł, aby dobudować do formularza drugie pole typu choice w którym będę przechowywał tablicę miast
W tpl, gdzie renderuje widok, przekazałem do generowania pola states, pole cities i nadpisałem tpl pola states. W nadpisanej tpl pola odtworzyłem strukturę generowania checkboxa dla województwa. Pod spodem wrzuciłem generowanie przekazanego pola cities, do którego przekazałem "id" województwa. Pole to również zostało nadpisane w tpl, tak aby obsłużyć grupowanie i wyświetlić miasta jedynie z grupy o danym "id" województwa. Do generowania pola używam funkcji form_widget i niestety w tym wypadku użycie dla każdego województwa jest niemożliwe, gdyż tej funkcji można użyć wyłącznie raz dla danego pola formularza. Trochę psełdokodu:
Tak jak wspomniałem wyżej, użycie {% form_widget(cities, {'state': choice.vars.value}) %} w pętli for wykonuje się tylko raz. Czytając posty innych ludzi dowiedziałem się, iż przy pomocy tej funkcji można wygenerować "widget" tylko raz. Dokładnie tak też się dzieje u mnie, działa wyłącznie dla pierwszego województwa, dla kolejnych już nie. Tak więc mój pomysł okazał się kompletnie nie trafiony. Mimo prób z różnymi "hot fixami" do resetowania formularza itd, nie udało się otrzymać oczekiwanego efektu. Mam nadzieję, że ktoś dotrwał do końca i będzie w stanie poradzić mi jakieś rozwiązanie. Nie oczekuję gotowego kodu, potrzebuję jakiejś drogi, którą podążać. Być może istnieje już jakieś gotowe rozwiązanie dla tej wersji symfony(sic!). Za wszystkie informacje serdecznie dziękuję! Pozdrawiam! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:55 |