【发布时间】:2012-02-07 11:40:21
【问题描述】:
我正在 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);} ));
这是错误的,因为:
- 我必须指定
ServiceTypeid - 将
'services'添加到构建器两次,将覆盖第一次添加(这是合乎逻辑的,但如果不更改实体就无法解决)
处理此类表单的最佳选择是什么?到目前为止只有 2 个ServiceType-s,但我想保持它的动态性和可重复使用性。
【问题讨论】:
-
我也有类似的问题。这是我的问题link。当你完成这个任务时,你会写一些例子吗?