2014-08-29 78 views
0

我試圖用Sonata Admin Bundle創建一篇文章。prePersist創建文章時掛鉤

我有一個領域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

你爲什麼不把它保存在數據庫中的布爾字段,並注意時間的每個條目和執行,當你已批准1的進一步的邏輯保存在數據庫中添加簡單的新領域datetime和其他領域複選框 – 2014-08-29 22:53:59

回答

1

爲什麼不在執行$em->flush();之前在控制器中設置日期時間(如果該複選框設置爲true)。在您的示例中,您可以使用不在實體中的其他字段。您必須添加mapped false,以便不會引發異常。

$formMapper 
    ->add('itemTitle', 'text', array('label' => 'Article Title')) 
    ->add('additionalField', 'checkbox', array(
     'label'  => 'Approved', 
     'required' => false, 
     'mapped' => false 
    )) 
; 

並在控制器中檢查表格中的值是否爲真,並在持續和刷新之前設置日期時間。

if($form->get('additionalField')->getData()) 
$article->setitemApproved(new \DateTime());