Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][Symfony2] Wyświetlenie subformularza inline
athabus
post 23.09.2014, 15:37:24
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Hej,

uczę się symfony2 i natknąłem się na taki problem. Mam formularz i w nim kolekcję jako subformularz. Powiedzmy, że formularz główny to driver w a nim kolekcja cars.

Chciałbym uzyskać taki efekt, że subformularz cars (który ma 3 pola) wyświetlany był inline (czyli pola obok siebie). Czyli innymi słowy taki efekt:

driver_firstname
driver_lastname
car1.brad | car1.year | car1.power
car2.brad | car2.year | car2.power

Wszystkie przykłady formularzy kolekcji dotyczą formularzy z 1 polem i nigdzie nie ma przykładu jak renderować pola subformularza z kolekcją.

A jeśli ktoś przy okazji korzysta BraindcraftedBootstrapBundle to jeszcze bardziej interesowałoby mnie jak ten efekt uzyskac za pomocą bootrap_collection, zachowując funkcjonujące przyciski javascript add/delete.


Ok sam sobie odpowiem - może się komuś przyda

W konfiguracji bootstrap_bundle trzeba dodać
  1. (...)
  2. 'options' => array(
  3. 'type' => 'text',
  4. 'attr' => array('style' => 'inline')
  5. (...)


Ale niestety brak możliwości jakiegokolwiek dostosowania do własnych potrzb, więc i tak trzeba przerobić sobie widok ręcznie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kazmij
post 24.09.2014, 20:21:33
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 12.02.2010

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


To rozwiązanie może Ci te elementy ułoży w linii, ale Ty chcesz mieć wpływ na wygląd tego formularze.

Na początek zapoznaj się z tym: http://symfony.com/doc/current/cookbook/fo...tomization.html

W dokumencie jest opisane jak dostosować taki form a nawet jak zrobić szablon dla wszystkich formularzy tak aby były w jednym stylu i można by je było wywołać jedną linią czyli:

  1. {{ form_widget(form) }}


jeśli używasz Twiga.

Możesz także każdy form renderować na jaki sposób tylko chcesz jednak wtedy czeka CIę więcej pisania.

Np mając kolekcję formularzy "car" możesz się przejść po ich kolekcji w ten sposób:

  1. {% for car in form.cars %}
  2. {{ form_widget(car) }}
  3. {% endfor %}


poza tym możesz zamiast "form_widget(car) " dać renderowanie każdego elementu tego forma osobno np:

  1. {{ form_label(car.jakiespole) }}
  2. {{ form_widget(car.jakiespole) }}
  3. {{ form_errors(car.jakiespole) }}
  4.  


Możliwości renderowania tego masz nieograniczone i w zasadzie robisz z tym co chcesz.
Go to the top of the page
+Quote Post
athabus
post 24.09.2014, 20:56:25
Post #3





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Dzisiaj w temat się trochę wgryzłem, bo miałem taki utrudniony przypadek subformularza, który musiałem rozszerzyć o pole typu atocomplete i kilka innych funkcjonalności javascript/ajax. Ogólnie o ile samo zrenderowanie subformularza nie było większym kłopotem (zrobiłem to dokładnie za pomocą tych widgetów, które podałeś), o tyle już problem pojawił sie przy prototypie formularza wykorzystywanym w dodawaniu nowych obiektów do kolekcji dynamicznie za pomocą javascriptu - okazało się, że jednak łatwo to obejść i wyeksportowac wszystko do osobnego widoku i prototyp wtedy też można renderować. Coraz bardziej podoba mi się to symfony ;-)
Go to the top of the page
+Quote Post
kazmij
post 24.09.2014, 21:10:21
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 12.02.2010

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


Symfony fajny framework. Wcześniej korzystałem z Zenda 1, ale potem kiedy wyszedł Zend 2 to bardzo się zniechęciłem do Niego i przesiadłem się na Symfony 2, nie żałuję.
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 Wersja Lo-Fi Aktualny czas: 23.06.2025 - 07:25