我尝试使用Sonata Admin Bundle创建文章。
我有一个带有字段itemApproved的项目。这是一个日期时间字段。但我将该字段显示为这样的复选框:
$formMapper
->add('itemTitle', 'text', array('label' => 'Article Title'))
->add('itemApproved', 'checkbox', array(
'label' => 'Approved',
'required' => false,
))
;
现在我想检查复选框是否已选中。如果是 - >设定日期时间。
我试图这样做:
public function prePersist($article)
{
if($article->getitemApproved())
{
$article->setitemApproved(new \DateTime());
}
}
但现在我收到了这个错误:
Expected a Boolean.
因为他仍然认为这是一个复选框。我怎么能以正确的方式解决?
答案 0 :(得分:1)
如果复选框设置为true,为什么不在执行$em->flush();
之前在控制器中设置日期时间。在您的示例中,您可以使用不在实体中的其他字段。您必须添加mapped false,以便不会抛出异常。
$formMapper
->add('itemTitle', 'text', array('label' => 'Article Title'))
->add('additionalField', 'checkbox', array(
'label' => 'Approved',
'required' => false,
'mapped' => false
))
;
在控制器中检查表单中的值是否为true,并在保持和刷新之前设置日期时间。
if($form->get('additionalField')->getData())
$article->setitemApproved(new \DateTime());