Symfony 4 序列化具有关系意外值 NULL 的实体

Symfony 4 serialize entity with relationship unexpected value NULL

我在帖子和用户之间有 ManyToOne 关系:

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User\User")
 */
private $author;

在我从端点获得响应后,如下所示:

array:2 [
  "message" => "OK"
  "data" => array:1 [
    0 => Post {#6077
      -id: 1
      -title: "sda"
      -teaser: "asdj"
      -content: "asd"
      -createdDateTime: DateTime @1517078058 {#6075
        date: 2018-01-27 18:34:18.0 UTC (+00:00)
      }
      -deletedDateTime: null
      -author: User {#6294
        +__isInitialized__: false
        -id: 1
        -firstName: null
        -lastName: null
        -email: null
        -activationCode: null
        -isActive: null
        -createdDateTime: null
        -deletedDateTime: null
         …2
      }
      -statusId: false
    }
  ]
]

我正在尝试将其序列化为 JSON。以前(Symfony 3)我设法解决了循环引用的问题,但这有点不同。

我不断收到 500 条异常响应:

NotNormalizableValueException
An unexpected value could not be normalized: NULL

如果我删除实体之间的关系就没问题,所以这显然是问题所在。

它将相关对象视为无法规范化的对象。因为某些原因。不知道为什么会这样。在文档中没有找到任何相关内容。

我在这里遗漏了什么吗?

我需要更多信息来帮助您。您使用的是什么序列化程序,Symfony 的?你是如何加载序列化程序的?不管它是什么,错误很明显:您正在使用的序列化程序的规范化程序在找到空字段时不知道该怎么做。我的猜测是你只加载了一个标准化器(大约 5 个可用的)到你的序列化器,如官方 Symfony 序列化器文档中所示。

我想我已经解决了我的问题。我去了:

/vendor/symfony/serializer/Serializer.php

经过少量调查后,我发现规范器正在崩溃 PHP RESOURCE。

原来我的用户 table 中有一个 VARBINARY 类型的字段。根据 doctrine documentation 类型被翻译成 PHP 资源。

结论:Symfony序列化对于序列化实体和相关子实体没有任何问题。它根本无法规范化资源类型的数据。

我认为这是值得记住的事情。