我正在使用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。目前我已经决定停止使用链接帖子中描述的处理程序,而是手动验证然后直接与实体管理器一起使用。
答案 0 :(得分:0)
按其性质的复选框只能有2种状态,无论是真还是假。所以不选择它只会被视为错误,而不是没有回答。
我想说实现目标的最简单方法是使用带有true
和false
的选项字段作为选项并添加空值。
$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会变得凌乱