Symfony 3-自动序列化DateTime对象 [英] Symfony 3 - automatically serialize DateTime object

查看:57
本文介绍了Symfony 3-自动序列化DateTime对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的项目中,我有一些带有 createdAt 列的实体。

In my project I have some entity with createdAt column.

//...
class Acme
{
    /**
     * @var DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    protected $createdAt;
}

我已启用 FOSRestBundle 使用Symfony序列化器:

I have enabled FOSRestBundle with Symfony serializer:

fos_rest:
    disable_csrf_role: ROLE_API
    param_fetcher_listener: true
    body_listener: true
    format_listener:
        rules:
            - { path: '/', fallback_format: json, prefer_extension: false }
    routing_loader:
        default_format: json
        include_format: false
    view:
        view_response_listener: force

我选择 AcmeRepository 中的日期库:

public function methodName() 
{
   $qb =  $this->createQueryBuilder('d');
   $s = $qb->select('d.createdAt']);

   return $s->getQuery()->getArrayResult();
}

结果,在我的控制器中:

And in result, in my controller:

$res = $em->getRepository('AppBundle:Acme')->methodName();
return $res;

返回json,而不是 [{ created_at: 2016 -04-04 12:13:13}] 我得到了:

It's returns json, but instead of [{"created_at": "2016-04-04 12:13:13"}] i'm getting this:

[{"created_at":{"timezone":{"name":"UTC","location":{"country_code":"??","latitude":0,"longitude":0,"comments":""}},"offset":0,"timestamp":1459769277}]

我该如何解决

推荐答案

您可以使用适当的注释类型指定为FOS REST模块定义的类型的格式(选中此处文档)。例如:

You can specify the format of the Type defined for the FOS REST module with the proper annotation Type (check here the doc). As example:

use JMS\Serializer\Annotation\Type as JMS;

class Acme
{
    /**
     * @var DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     * @JMS\Type("DateTime<'Y-m-d'>")
     */
    protected $createdAt;
}

希望这项帮助

这篇关于Symfony 3-自动序列化DateTime对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆