Я рендерил форму в Symfony2 с data_class, сопоставленным с Reservation
сущностью, и эта форма имеет тип поля сущности класса Service
. Отношение между Reservation
и Service
классом много ко многим. Служба затем имеет ServiceType
, который является другим классом, который сопоставлен какому-либо одному из Service
класса
То, что я хочу сделать, это отобразить все сервисы в виде флажков в форме бронирования, сгруппированных по типу услуг. Пока я могу отображать все сервисы вместе, как это (код из ReservationType
класса):
$builder->add('services','entity', array(
'class' => 'MyBundle:Service',
'multiple' => true,
'expanded' => true
));
И отображение формы по умолчанию:
<form action="{{ path('reservations', {'step': 2}) }}" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" />
</form>
Результат примерно такой:
□ servicetype1 option
□ servicetype1 another option
□ servicetype2 option
□ servicetype2 another option
То, чего я хотел бы достичь, это:
servicetype1:
□ option
□ another option
servicetype2:
□ option
□ another option
Я пытался указать только подмножества служб, используя опцию query_builder, например:
$builder->add('services','entity', array(
'class' => 'MyBundle:Service',
'multiple' => true,
'expanded' => true,
'query_builder' => function (\My\Bundle\Entity\ServiceRepository $repository)
{return $repository->createQueryBuilder('s')->where('s.serviceType = ?1')->setParameter(1, 1);} ));
$builder->add('services','entity', array(
'class' => 'MyBundle:Service',
'multiple' => true,
'expanded' => true,
'query_builder' => function (\My\Bundle\Entity\ServiceRepository $repository)
{return $repository->createQueryBuilder('s')->where('s.serviceType = ?1')->setParameter(1, 2);} ));
Это неправильно, потому что:
- Я должен указать
ServiceType
id
- Если дважды добавить
'services'
в построитель, то первое дополнение будет перезаписано (что логично, но не может быть решено без изменения сущностей)
Что было бы лучшим вариантом для обработки подобных форм? Пока только 2 ServiceType
, но я бы хотел, чтобы это было динамичным и многоразовым.