以 symfony 形式向实体添加 none 值
Adding none value to entity in symfony form
在 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
实体(表单是针对该实体)的,因此一次只能有一个插槽 selected。正如我所说,一切都按计划进行。用户可以 select 一个插槽并保存它,每个人都很高兴。
当您尝试 "unselect" 插槽时,麻烦就开始了(是的,这必须是可能的)。所以我需要添加一个 none
值,并带有 None of the listed items
之类的标题。问题是我该怎么做?
选择字段(entity
字段扩展)在 Symfony 表单中呈现的方式是由某种逻辑定义的(documentation). I'm guessing that you're rendering a <select>
dropdown, in which case if you're using Symfony 2.6 or above, placeholder
is what you want (documentation)。但是请注意,对于某些数据库(例如 Postgres),placeholder
选项在 Symfony 2.7.0 和(我认为)2.7.1.
中被破坏
表单的 empty_data
/ empty_value
问题是长期混淆的一部分。简而言之,使用 placeholder
.
你应该使用 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 */
))
在 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
实体(表单是针对该实体)的,因此一次只能有一个插槽 selected。正如我所说,一切都按计划进行。用户可以 select 一个插槽并保存它,每个人都很高兴。
当您尝试 "unselect" 插槽时,麻烦就开始了(是的,这必须是可能的)。所以我需要添加一个 none
值,并带有 None of the listed items
之类的标题。问题是我该怎么做?
选择字段(entity
字段扩展)在 Symfony 表单中呈现的方式是由某种逻辑定义的(documentation). I'm guessing that you're rendering a <select>
dropdown, in which case if you're using Symfony 2.6 or above, placeholder
is what you want (documentation)。但是请注意,对于某些数据库(例如 Postgres),placeholder
选项在 Symfony 2.7.0 和(我认为)2.7.1.
表单的 empty_data
/ empty_value
问题是长期混淆的一部分。简而言之,使用 placeholder
.
你应该使用 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 */
))