【问题标题】:Doctrine2 + FOSRestbundle, format value before serializingDoctrine2 + FOSRestbundle,序列化前格式化值
【发布时间】:2014-07-08 10:09:11
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: rest symfony doctrine-orm fosrestbundle


    【解决方案1】:

    如果您使用的是 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 注释。

    【讨论】:

      【解决方案2】:

      我不确定 @Type 注释是否在 2014 年可用,

      但是现在,如果您需要将DateTime 属性序列化为unix 时间戳

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多