2014-07-08 53 views
1

我有一個標準datetimetz字段的實體,我通過使用FOSRestbundle實現的REST接口提供服務。Doctrine2 + FOSRestbundle,序列化前的格式化值

按照標準設置,該日期被序列化爲一個字符串,例如, 「2014-07-05T09:53:45 + 0200」。

取而代之的是,我希望它被用作Unix時間戳(即通過使用PHP DateTime類的標準getTimeStamp()函數)。然而,我現在才意識到,Doctrine2或者Serializer似乎都不會通過它的getter訪問這個字段。因此,它改變了什麼都沒有,如果我有我的實體定義如下:

public function getDate() { 
    return $this->date->getTimestamp(); 
} 

除在返回的REST視圖中手動設置該領域,這將是爲它服務之前進行適當的轉換的好方法給客戶?

回答

2

如果您使用的是JMSSerializer,請使用@Accessor註釋。

class MyClass 
{ 
    /* 
    * @JMS\Accessor(getter="getTimestampDateTime") 
    */ 
    private $datetime; 

    public function getDatetime() 
    { 
     return $this->datetime; 
    } 

    public function getTimestampDateTime() 
    { 
     return $this->getDatetime()->getTimestamp(); 
    } 
} 

如果要強制串行使用公共的get/set,使用@AccessType註解。

0

我不知道如果@Type註釋是可利用的在2014年,

但現在,如果你需要做一個DateTime屬性序列化爲UNIX時間戳

/** 
* @JMS\Type("DateTime<'U'>") 
*/ 
private $toTimestamp;