在Symfony表单中,我有一个名为slot
的字段,该字段与具有自定义查询的实体匹配。让我们这样说:
->add('slot', 'entity', array(
'label' => 'Slot',
'class' => 'FooBarBundle:Slot',
'property' => 'name',
'required' => false,
'query_builder' => function(\Foo\BarBundle\Entity\SlotRepository $er) use ($ids) {
return $er->createQueryBuilder('u')
->where('u.id IN(:ids)')->setParameter('ids', $ids);
}
))
到目前为止,每件事都有效。 slot
是ManyToOne
实体上的Team
匹配(表单为),因此一次只能选择一个广告位。正如我所说,每件事都按照计划进行。用户可以选择一个插槽并保存,每个人都很开心。
当您尝试"取消选择"一个槽(必须是可能的)。因此,我需要添加none
值,其标题为None of the listed items
或其他任何内容。问题是我该怎么做?
答案 0 :(得分:1)
您应该使用empty_data
和empty_value
:
->add('slot', 'entity', array(
'label' => 'Slot',
'class' => 'FooBarBundle:Slot',
'property' => 'name',
'required' => false,
'query_builder' => function(\Foo\BarBundle\Entity\SlotRepository $er) use ($ids) {
return $er->createQueryBuilder('u')
->where('u.id IN(:ids)')->setParameter('ids', $ids);
},
'empty_data' => null,
'empty_value' => 'None of the listed items' /* or null */
))
答案 1 :(得分:0)
选择字段(entity
字段扩展)在Symfony表单中呈现的方式由某种逻辑(documentation)定义。我猜你正在呈现<select>
下拉列表,在这种情况下,如果您使用的是Symfony 2.6或更高版本,placeholder
就是您想要的(documentation)。但请注意,对于某些数据库(例如Postgres),placeholder
选项在Symfony 2.7.0和(我认为)2.7.1中被破坏。
表单的empty_data
/ empty_value
问题是长期困惑的一部分。简而言之,请使用placeholder
。