![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
już wymiękam... no nie mogę tego nigdzie znaleźć, co chcę zrobić . Mam formularz w którym są jakieś tam pola i w nim są dwa wyjątkowe: categoria i podkategoria. Są one połączone z innymi dwoma tabelami. Teraz chcę zrobić tak, że jak wybieram najpierw kategorię, to przeładowuje mi się strona (ewentulanie asynchronicznie ajax) i ładuje dla tej wybranej kategorii odpowiedniego selecta z podkategoriami. Chodzi o to, że dane kategorie są w odpowiednich kategoriach i nie mogą wybrać byle jaką podkategorię . Próbowałem tego: http://symfony.com/doc/current/cookbook/fo...dification.html Ale nie widzę tutaj możliwości wrzucenia akcji onchage, ani przekazania argumentu do tych listenerów, bo muszę odpowiednie ID przekazać kategorii, by na postawie tego id zaciągnać odpowiednie kategorie. Czy może ktoś budował taki formularz albo taki mechanizm i mógłby pomóc. Ogólnie jak wywołuje jakiego kolwiek listenera czy to w formie:
czy w to formie
Zawsze mam komunikat jakby nie działał ten lister jakby go nie było:
Ten post edytował basso 8.05.2013, 14:57:17 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Cytat Zawsze mam komunikat jakby nie działał ten lister jakby go nie było: Przecież to nie ma związku z Symfony2, tylko z przestrzeniami nazw w PHP. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok brakło mi use. Dzięki
![]() Ten post edytował basso 8.05.2013, 21:44:47 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Klasa jaka Ciebie interesuje to Symfony\Component\Form\FormEvenets, nie Backend\CmsBundle\Form\FormEvents. Absolutne podstawy składni języka... http://php.net/manual/en/language.namespaces.importing.php
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
W jaki sposób mogę dodać listę (selecta), używając tego rozwiązania?
Wewnątrz addEventListener nie wiem jak dodać pola do formularza. Kojarzy ktoś jak to dodać będe bardzo wdzięczny. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Jakoś mi nie po drodze ostatnio z Symfony2, więc mogę się mylić.
Sposób z cookbooka nie działa? Spójrz co się dzieje teraz w Twoim kodzie. Budujesz sobie formularz poprzez dodanie do niego odpowiednich pól. Dodajesz także obsługę zdarzenia, a zdarzenie to wywoływane jest w momencie gdy podpinasz do niego dane czyli już dawno po zbudowaniu formularza. Wynika z tego, że w reakcji na zdarzenie do formularza musisz dodać już gotowe (tzn. zbudowane) pole select. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok... udało mi się zrobić, zgodnie z dokumentacją. Tylko mam kolejny problem... jak podpiąć do tego <select> czyli mojego category... zdarzenie ONCHANGE . Nie chcę tego robić za pomocą jquery tylko jako atrybut pola select czyli <select onChagne="formularz.submit()"></select>
I jeszcze jedno pytanko: Czy można w jakikolwiek sposób zmienić pozycje elementów w formularzu ? A to co zrobiłem i to co mi działa ![]()
Ten post edytował basso 10.05.2013, 12:56:04 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Po co chcesz podpinać to przez atrybut HTMLa onchange? Dlaczego nie zrobisz tego normalnie, poprzez JS/DOM:
Czy tam wykorzystując jQuery/inną tego typu bibliotekę:
Ten post edytował Crozin 10.05.2013, 12:56:52 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hej, dzięki Crozin za pomoc.
No tak to podpiąłem przez jquery bez problemu... tylko że ja piszę sobie Generator i wiesz... generator mi nie dopisze kodu do pliku .js , a tak to tam będę miał <select onChange="this.submit()"> ). Dlatego chcę to wrzucić do atrybutu... wtedy każdy select który będę chciał przy generowaniu będzie miał z buta tą metodę... bez bawienia się we wskazywanie id czy klasę po którym js ma wywołać metodę onChange(). No ale zrobiłem to po jquery bo testuje teraz coś innego... mam problem. Bo jak wysyłam formularz to teraz w tej klasie public function buildForm(FormBuilderInterface $builder, array $options) {....} potrzebuje odebrać Request aby wydrzeć z niego wysłane pola => chodzi mi o id kategorii... Niby jest bind dla $form w metoddzi create ... ale jak wywołuj Request to go nie widzi ;/ . Kojarzy ktoś jak wyświetlić w tej klasie wysłane pola ? Oczywiście chcę ominąć metodę $_GET czy $_POST .... bo tak to na luzie sobie wydrę, ale chcę mieć to zabezpieczone przez Request Symfonii. Ok ROZWIĄZAŁEM TO TAK ALE DZIWADŁA MI SIĘ DZIEJĄ. W kontrolerze:
i teraz w PAGES TYPE w formularzu:
I teraz jest problem... bo jak wyświetlacm sobie print_r($rq) czyli mój request to dostaję wszystkie dane tak jak chce tj:
Tylko, że jak daję print_r($rq->get("lead")); TO MI NIE POKAZUJE tego pola hmmm Pytanie1 : Czy muszę mieć to w routingu? E no ... chyba nie, bo przecież to jest post wysłany z formularza... nawet w develope jest :
W jaki zatem sposób mogę z $request-a pobrać dane bo niby w dokumentacji jest $request->request->get("lead") a mi nei działa ![]() Ten post edytował basso 10.05.2013, 14:59:07 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 10 Dołączył: 16.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli chcesz mieć do każdego pola typu select dodatkowo dodaną jakąś funkcjonalność po stronie JS, to i tak dużo lepszy sposobem będzie stworzenie własnego typu formularza z odpowiednim szablonem w Twig-u lub PHP. W tym szablonie możesz dodać jakąś wstawkę w JS-ie tylko dla tego pola (z poziomu szablonów masz dostęp do zmiennych formularza, czyli atrybutów i całej reszty).
Natomiast drugi problem rozwiązujesz źle. Jeśli chcesz mieć dostęp do jakiegokolwiek obiektu w klasie formularza, musisz stworzyć formularz jako usługę - wtedy masz możliwość przekazywania innych usług, np. request lub całego kontenera usług, żeby pobrać request. Ten post edytował m44 10.05.2013, 18:43:35 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
@basso zgaduję, że kombinujesz z ajaxem i chcesz dobrać się do danych, których nie masz. Lepiej byłoby gdybyś trochę dokładniej opisał przepływ który masz i na którym etapie masz błąd.
Przesyłanie obiektu $request jako atrybut html do dość ciekawe rozwiązanie. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Formularze nie powinny mieć bezpośredniego kontaktu z obiektem Request.
2. Dane z formularze, które bindujesz przy jego tworzeniu masz dostępne spod $builder->getData(). 3. |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
"Przesyłanie obiektu $request jako atrybut html do dość ciekawe rozwiązanie." Nie jako atrubuty html tylko jako argumentu Form TYpe. I ten request jest tam przekazywany i jest wszystko git, tylko nie mogę z niego wydrzeć pól. Pytanie mam, bo w kontrolerze/akcji dzieje mi się to samo. 1. Jak w akcji wyświetlić wysłany formularz Robie tak : print_r($request->request); Wyświetla mi się obiekt request z wszystkimi polami...
Ale jak biorę pojedyńczą wartość to:
Dziwne to nie da rady, biała karta, null po prostu ;/ W sumie ta sama sytuacja co w FormType... no ale, żeby w kontrolerze nie można było odebrać requesta i go pojedyńczo wyświetlić no to mi się nie chce wierzyć. Chyba coś źle robię ;/ Ten post edytował basso 13.05.2013, 11:26:42 |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
No to zauważ, że tablica zawierająca klucz "lead" znajduje się w tablicy z kluczem "backend_cmsbundle_pagestype".
Cytat Nie jako atrubuty html tylko jako argumentu Form TYpe. I ten request jest tam przekazywany i jest wszystko git, tylko nie mogę z niego wydrzeć pól. No jednak raczej jako atrybuty html. I nie jest git o czym napisał Ci też Crozin. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 63 Pomógł: 10 Dołączył: 16.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ale jak biorę pojedyńczą wartość to:
Dziwne to nie da rady, biała karta, null po prostu ;/ W sumie ta sama sytuacja co w FormType... no ale, żeby w kontrolerze nie można było odebrać requesta i go pojedyńczo wyświetlić no to mi się nie chce wierzyć. Chyba coś źle robię ;/ A jak niby ma Ci to działać, skoro nawet w ParameterBag nie ma takiego klucza? Musisz najpierw wyciągnąć "backend_cmsbundle_pagestype" i z niego pozostałe lub spróbować za pomocą $request->get('backend_cmsbundle_pagestype[lead]', array(), true);. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 155 Pomógł: 1 Dołączył: 12.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
A no to działa działa
![]() ![]() ![]() Dzięki za pokazanie... ale serio Wy tak ścieżki całe ładujecie by odebrąć 1 pole z formularza? Crozin a "2. Dane z formularze, które bindujesz przy jego tworzeniu masz dostępne spod $builder->getData()." 1. Nie rozumiem tego troszkę, bo bindowane mam do formularze $request. Czy muszę jeszcze coś przybindować dodatkowo?. 2. W FormType ( u mnie PagesType) jak var_dump($builder->getData()) to wyświetla mi pusty obiekt... no a formularz jest wysłany:
Uczę się powoli, i dzięki za poradę, bo faktycznie mogę robić praktyki których stosować się nie powinno... prośba jeszcze o pomoc z ww. Crozin mógłbyś mi pomóc , bo ja jak wyświetlam to FormType ( u mnie PagesType) jak var_dump($builder->getData()) to wyświetla mi pusty obiekt... no a formularz jest wysłany ![]() I wszystko jasne... błąd Symfonii, czyli się nie da, a ja tydzień się już męczę ![]() Ten post edytował basso 16.05.2013, 14:01:05 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 13:37 |