2014-01-25 50 views
0

我已經開始使用Sonata Admin軟件包,我正在關注如何使用軟件包映射實體以創建管理界面。沒有爲班級定義實體管理器DateTime

我創建了一個名爲Post的實體,這是配置YML文件:

Emiliano\PostsBundle\Entity\Post: 
type: entity 
table: null 
repositoryClass: Emiliano\PostsBundle\Entity\PostRepository 
id: 
    id: 
     type: integer 
     id: true 
     generator: 
      strategy: AUTO 
fields: 
    title: 
     type: string 
     column: Title 
     lenght: 100 
    published: 
     type: boolean 
     column: Published 
    publishingDate: 
     type: datetime 
     column: Publishing_Date 
     nullable: TRUE 
    lifecycleCallbacks: { } 

然後在我的Admin類我有configureFormFields方法:

protected function configureFormFields(FormMapper $formMapper) { 
    $formMapper->add('title', 'text') 
     ->add('published', 'checkbox', array('required' => false)) 
     ->add('publishingDate', 'sonata_type_model_hidden'); 
} 

我發現sonata_type_model_hidden的奏鳴曲admin documentation。我想要實現的是以編程方式處理髮布日期(例如,僅當複選框published被選中時設置日期)纔將隱藏實現給用戶。

一切工作正常進行創建,刪除和讀取,當它涉及到修改的實體,我得到的堆棧跟蹤這樣的信息:如果我告訴現場的一切工作正常

No entity manager defined for class DateTime 
In sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Model/ModelManager.php at line 214 

,我想也使用:

->add('publishingDate', 'hidden'); 

沒有成功。

這裏究竟是什麼問題?是否因爲Sonata Admin試圖用實體值填充表單併爲publishingDate填充DateTime,而在表單說明中我寫了sonata_type_model_hidden?如果是這樣,我怎麼能繞過這個?

+0

那麼ModelManager中的第214行是什麼?我猜你可能會使用DateTime而不是\ DateTime。純粹的猜測。 – Cerad

+0

'$ em = $ this-> registry-> getManagerForClass($ class);'和我正在使用\ DateTime。 –

+0

然後檢查你的代碼,因爲我很確定你有$ class ='DateTime',並且肯定不會有$ em。 – Cerad

回答

1

sonata_type_model_hidden不僅僅是hidden場掃描振盪器,根據文檔:

sonata_type_model_hidden將使用ModelHiddenType的實例來呈現隱藏字段。隱藏字段的值是相關實體的標識符。

如果我理解你的問題,你要設置發佈日期只有當現場published ==真

你可以使用實體preSave/preUpdate生命週期回調eaxmple

public function preSave() 
{ 
    /** 
     * Check if item is published 
     */ 
    if($this->getPublished()) { 
     $this->setPublishingDate(new \DateTime()); 
    } else { 
     $this->setPublishingDate(null); 
    } 
} 

和刪除publishingDate場SonataAdmin表單。

+0

我已經在使用preSave/preUpdate鉤子,我最終刪除了表單中的字段,因爲它們沒用,還是爲什麼這個錯誤發生在我的頭上。 –