使用Symfony序列化程序时如何解决DateTimeNormalizer问题

时间:2019-04-24 10:30:19

标签: symfony serializer

使用Symfony序列化器将DateTime对象标准化为字符串时遇到麻烦。

我正在使用以下代码:

protected function createResponse($data, Int $statusCode){

    $serializedData = $this->serialize($data);

    return new Response($serializedData, $statusCode, array(
        'Content-Type' => 'application/json',
    ));

}

protected function serialize($data, string $format = 'json')
{
    $encoders = [new JsonEncoder()];
    $normalizers = [new ObjectNormalizer(), new DateTimeNormalizer()];

    $serializer = new Serializer($normalizers, $encoders);

    return $serializer->serialize($data, $format);
}

我正在将包含DateTimeInterface变量的实体传递到上面定义的createResponse方法中,但是日期未规范化为RFC3339格式。我错过了重要的一步吗?

我得到的示例输出:

"reportDate":{"timezone":{"name":"UTC","transitions":[{"ts":-9223372036854775808,"time":"-292277022657-01-27T08:29:52+0000","offset":0,"isdst":false,"abbr":"UTC"}],"location":{"country_code":"??","latitude":0,"longitude":0,"comments":""}},"offset":0,"timestamp":1551398400}

1 个答案:

答案 0 :(得分:1)

tl; dr 顺序很重要。

尝试:

<module name="Checker">
  <--! ... -->
  <module name="TreeWalker">
    <--! ... -->
    <module name="SuppressWarningsHolder"/>
  </module>
  <module name="SuppressWarningsFilter"/>
</module>

代替:

$normalizers = [new DateTimeNormalizer(), new ObjectNormalizer()];