Wpis z mikrobloga

#php #symfony2

Czy można zrobić w symfony pole które ma pogrupowane checkboxy ale typu entity? Czy trzeba wczytać dane do tablicy i potem zrobić pole choice? Wiem że w choice się da robiąc tak:
$choices = array('grupa 1' => array('a', 'b', 'c'), 'grupa 2' => array('d', 'e', 'f'))

Wiem że można przez themes jakoś i przekazać do theme kompletne wartości z bazy a nie tylko id i value. Można jakoś prosto?
  • 19
@gajowy_marucha:

->add('assignedTo',
'entity',
array(
'class' => 'UserBundle:User',
'property' => 'username',
'expanded' => true,
'by_reference' => false,
"multiple" => true,
"label" => 'Użytkownicy powiązani',
"required" => false
)

checkboxy manytomany :)
@gajowy_marucha: i nie dostaniesz się, dlatego że DataTransformer przekazuje dane do widoku, w takiej strukturze, jaką ma to wyświetlić choices.
Wydaje mi się, że do widoku i tak trafiają generycznie pogrupowane dane. Jeśli nie, to zobacz co się dzieje w DataTransformer dla pola typu entity.
@gajowy_marucha: to i tak jest dziwne, bo z tego co pamiętam, widok dla "entity" jest dziedziczony z "choices". Problem musi leżeć w tym, jak encje są przerabiane na dane dla widoku. (ale mogę się mylić)
@Kofels:

W sumie jestem wciąż nowy w Symfony ale napiszę co wymodziłem:

1. Zrobiłem custom form field, z parent choice. W kontrolerze przekazuję entity manager do konstruktora formularza i dalej do mojego custom field w formularzu. W tym custom field mam normalnie query builder odpalony żeby pobrać dostępne opcje z bazy z odpowiednim sortowaniem. Podobnie jest w dokumentacji pokazane DataTransformers, też jest em przekazywany w ten sposób.

2. Zrobiłem swój theme
W kontrolerze przekazuję entity manager do konstruktora formularza i dalej do mojego custom field w formularzu.


@gajowy_marucha: To możesz sobie uprościć: wstrzykuj EM w konstruktorze Type'a i zarejestruj go w DIC: http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services

W ten sposób kontroler nie musi pośredniczyć w przekazywaniu zależności. ta sama idea dla transformersów – możesz je wstrzyknąć w konstruktorze Type'a, a same transformersy oczywiście mogą dostać EM także w konstruktorze.

BTW, jak masz chwilę, to proponuję, żebyś