在symfony表单中不向实体添加任何值

时间:2015-08-10 02:02:21

标签: php symfony doctrine-orm symfony-forms symfony-2.1

在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);
    }
))

到目前为止,每件事都有效。 slotManyToOne实体上的Team匹配(表单为),因此一次只能选择一个广告位。正如我所说,每件事都按照计划进行。用户可以选择一个插槽并保存,每个人都很开心。

当您尝试"取消选择"一个槽(必须是可能的)。因此,我需要添加none值,其标题为None of the listed items或其他任何内容。问题是我该怎么做?

2 个答案:

答案 0 :(得分:1)

您应该使用empty_dataempty_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