Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2] Wyświetlenie subformularza inline
Forum PHP.pl > Forum > PHP > Frameworki
athabus
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.
kazmij
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.
athabus
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 ;-)
kazmij
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ę.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.