我有一个带有标准datetimetz字段的实体,我通过使用FOSRestbundle实现的REST接口提供服务。
根据标准设置,此日期序列化为字符串,例如“2014-07-05T09:53:45 + 0200”。
而不是这个,我希望它可以作为Unix时间戳(即使用PHP的DateTime类的标准getTimeStamp()函数)。但是,我刚才意识到Doctrine2或Serializer似乎永远不会通过它的getter访问这个字段。因此,如果我的实体定义中包含以下内容,它根本不会改变任何内容:
public function getDate() {
return $this->date->getTimestamp();
}
除了在返回的REST视图中手动设置此字段之外,在将其提供给客户端之前进行适当转换的好方法是什么?
答案 0 :(得分: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注释。
答案 1 :(得分:0)
我不确定@Type
注释是否在2014年可用,
但现在,如果您需要将DateTime
属性序列化为 unix时间戳:
/**
* @JMS\Type("DateTime<'U'>")
*/
private $toTimestamp;