我正在使用Symfony2渲染一个表单,数据类映射到“Reservation”实体,并且该表单具有实体字段类型,类为“Service”。 “Reservation”和“Service”类之间的关系是多对多。然后,服务有一个“ServiceType”,这是另一个类,从“Service”类映射为多对一。
我想做的是在预订表单中按服务类型分组显示所有服务复选框。到目前为止,我可以像这样一起显示所有服务(代码来自“ReservationType”类):
结果大致如下:
我正在尝试使用query_builder选项来指定服务的子集,例如:
我想做的是在预订表单中按服务类型分组显示所有服务复选框。到目前为止,我可以像这样一起显示所有服务(代码来自“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
-s,但我希望它保持动态和可重用。