创建文章时prePersist钩子

时间:2014-08-29 21:04:39

标签: php symfony datetime doctrine-orm sonata-admin

我尝试使用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.

因为他仍然认为这是一个复选框。我怎么能以正确的方式解决?

1 个答案:

答案 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());