Doctrine2 + FOSRestbundle,序列化前的格式值

时间:2014-07-08 10:09:12

标签: rest symfony doctrine-orm fosrestbundle

我有一个带有标准datetimetz字段的实体,我通过使用FOSRestbundle实现的REST接口提供服务。

根据标准设置,此日期序列化为字符串,例如“2014-07-05T09:53:45 + 0200”。

而不是这个,我希望它可以作为Unix时间戳(即使用PHP的DateTime类的标准getTimeStamp()函数)。但是,我刚才意识到Doctrine2或Serializer似乎永远不会通过它的getter访问这个字段。因此,如果我的实体定义中包含以下内容,它根本不会改变任何内容:

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

除了在返回的REST视图中手动设置此字段之外,在将其提供给客户端之前进行适当转换的好方法是什么?

2 个答案:

答案 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;