在symfony2中如何添加可空布尔值

时间:2016-03-31 17:05:08

标签: symfony

我正在使用FOSRestBundle,并且我正在尝试设置一个POST,该POST将允许为在FormType中定义为复选框的几个字段保存null。

我的实体的注释为nullable = true

/**
 * @ORM\Column(type="boolean", nullable=true)
 */
protected $foo_bar;

FormType(只会通过API使用,因此它主要留给deaults)需要设置为false

$builder->add('foo_bar', 'checkbox', array(
    'required' => false
));

当我保存并且foo_bar为null时,它在数据库中保存为0

$entityData = $request->request->all();
$entityData['foo_bar'] = null;
$entity = $this->container->get('acme.entity.handler')->post($entityData);

我需要将foo_bar保存为null(未回答),而不是0(回答错误)

(处理程序来自这里http://williamdurand.fr/2012/08/02/rest-apis-with-symfony2-the-right-way/它只是验证根据formtype发布的数据然后保持不变)

编辑: 我不确定FormTypes是否可以处理可以为空的布尔值。基于对此问题的响应的测试要么将false保存为null,要么将null保存为false。目前我已经决定停止使用链接帖子中描述的处理程序,而是手动验证然后直接与实体管理器一起使用。

2 个答案:

答案 0 :(得分:0)

按其性质的复选框只能有2种状态,无论是真还是假。所以不选择它只会被视为错误,而不是没有回答。

我想说实现目标的最简单方法是使用带有truefalse的选项字段作为选项并添加空值。

$builder->add('foo_bar', ChoiceType::class, array(
    'required'      => false,
    'choices'       => array(
        'Yes'       => true,
        'No'        => false,
    ),
    'empty_value'   => 'Not Answered',
));

当您在API而不是直接形式中使用文本时,文本可以是您想要的,但我想当您查看它时,它会使值更明确。

答案 1 :(得分:0)

也许复选框不是您需要的表单字段类型,也许您需要使用下拉菜单'是',' no','没有答案& #39;

根据定义,一个复选框可以包含两个值中的一个,无论是真还是假,你可以通过将字段设置为null然后不向用户显示复选框字段来在控制器中做一些奇怪的事情,但这会破坏& #39;关注点分离'指南,但如果你必须使用一个复选框,那么它的gona会变得凌乱