2013-10-29 69 views
0

我做的Symfony2的一個實體,我設置了實體createddatetime和updateddatetime,但是當我在控制器中使用二傳手發生這樣如何清除symfony2中的datetime錯誤?

FatalErrorException: Error: Call to a member function format() on a non-object in C:\wamp\www\QuickBacklog\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\DateTimeType.php line 44 

錯誤,這裏是我的實體的代碼:

/** 
    * Set createdDatetime 
    * 
    * @param \DateTime $createdDatetime 
    * @return Sections 
    */ 
    public function setCreatedDatetime($createdDatetime) 
    { 
     $this->createdDatetime = $createdDatetime; 

     return $this; 
    } 

    /** 
    * Get createdDatetime 
    * 
    * @return \DateTime 
    */ 
    public function getCreatedDatetime() 
    { 
     return $this->createdDatetime; 
    } 

    /** 
    * Set updatedDatetime 
    * 
    * @param \DateTime $updatedDatetime 
    * @return Sections 
    */ 
    public function setUpdatedDatetime($updatedDatetime) 
    { 
     $this->updatedDatetime = $updatedDatetime; 

     return $this; 
    } 

    /** 
    * Get updatedDatetime 
    * 
    * @return \DateTime 
    */ 
    public function getUpdatedDatetime() 
    { 
     return $this->updatedDatetime; 
    } 

但是當我在寫控制器發生

$date=date('Y-m-d H:i:s'); 
$entity->setCreatedDatetime($date); 
$entity->setUpdatedDatetime($date); 

錯誤我如何刪除這個錯誤?

回答

7

updatedDatetimecreateddatetime需要是DateTime類的對象。

所以控制器代碼應該是這樣的:

$date= new \DateTime(); 
$entity->setCreatedDatetime($date); 
$entity->setUpdatedDatetime($date); 
1

正如其他職位提到,你的實體期望類型爲DateTime,但我覺得我的信息的附加位,但幫助你在未來。

教義,你可以添加事件(如prePersist),所以你可以添加一個名爲setDefaultCreatedDatetime函數,它看起來像:

public function setDefaultCreatedDatetime() 
{ 
    $this->setCreatedDatetime(new \DateTime()); 
} 

那麼你可以添加:

lifecycleCallbacks: 
    prePersist: [setDefaultCreatedDatetime] 

到你的教義實體。這將節省您不得不手動調用此方法。

您也可以對setUpdatedTime執行相同的操作,並使用preUpdate事件。