我正在为过滤的实体集合显示一个 html 表,并且我想在每一行中显示一个复选框,作为表单的一部分,它将所选实体添加到会话 var。
我在想每个复选框都应该有实体 id 作为它的值,我会从表单字段数据中得到一个 id 数组(好的,所以值应该是实体的间接引用,但是为了简单)。
我尝试使用单个实体类型字段创建表单类型,映射到实体的 id 属性并嵌入到另一个具有集合类型字段的表单类型中。
class FooEntitySelectByIdentityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('foo_id', 'entity', array(
'required' => false,
'class' => 'MeMyBundle:FooEntity',
'property' => 'id',
'multiple' => true,
'expanded' => true
));
}
# ...
和
class FooEntitySelectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('identity', 'collection', array(
'type' => new FooEntitySelectByIdentityType,
'options' => array(
'required' => false,
'multiple' => true,
'expanded' => true,
'attr' => array('class' => 'foo')
),
));
}
# ...
在控制器中,表单是使用实体集合作为初始数据创建的
$form = $this
->createForm(
new \Me\MyBundle\Form\Type\FooEntitySelectionType,
$collection_of_foo
)
->createView()
;
呈现表单时,标识字段只有一个标签,但没有小部件。
甚至可以以这种特殊方式使用实体和集合类型字段吗?如果是这样,我可能做错了什么?