【问题标题】:Symfony 3 - automatically serialize DateTime objectSymfony 3 - 自动序列化 DateTime 对象
【发布时间】:2016-04-05 14:05:00
【问题描述】:

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

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

我已经用 Symfony 序列化器启用了FOSRestBundle

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();
}

结果,在我的控制器中:

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

它返回 json,但我得到的不是 [{"created_at": "2016-04-04 12:13:13"}]

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

我该如何解决这个问题?

【问题讨论】:

    标签: php doctrine-orm symfony


    【解决方案1】:

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

    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 Serializer 的解决方案?
    • 使用 symfony 序列化程序组件反序列化日期时间对象的示例可以在文档中找到here
    • 是否可以全局配置DateTime&lt;'Y-m-d'&gt;
    • 嗨@112Legion 如果您使用的是JMSSerializerBundle,您可以尝试在密钥处理程序here下设置日期时间
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2018-09-21
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多