代码之家  ›  专栏  ›  技术社区  ›  Robert

Symfony 4序列化关系值为空的实体

  •  1
  • Robert  · 技术社区  · 8 年前

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

    /**
     * @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
    

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

    它将相关对象视为无法规范化的对象。出于某种原因。不知道为什么会这样。在文件里找不到关于这个的任何东西。

    有什么我错过的吗?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Robert    8 年前

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

    /vendor/symfony/serializer/Serializer.php
    

    经过一点调查,我发现normalizer正在占用PHP资源。

    事实证明,我的用户表中有一个VARBINARY类型的字段。根据 doctrine documentation 该类型被转换为PHP资源。

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

    我认为这是值得记住的。

        2
  •  1
  •   Matías Navarro Carter    8 年前

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

    推荐文章