117、修复自定义Normalizer时IRI信息丢失的问题1
Symfony 中的 Normalizer 和 Serializer 组件 在 Symfony 框架中,Normalizer 和 Serializer 组件扮演着非常重要的角色,特别是在 API 开发中。Normalizer 负责将对象 normalize 成标准化的格式,而 Serializer 负责将对象 serialize 成指定的格式,例如 JSON、XML 等。 在本文中,我们将讨论如何修复自定义 Normalizer 时 IRI 信息丢失的问题。我们需要了解 Normalizer 和 Serializer 的基本概念。 Normalizer 是一个接口,负责将对象 normalize 成标准化的格式。 Symfony 框架提供了多种 Normalizer 实现,例如 ObjectNormalizer、ItemNormalizer 等。ObjectNormalizer 是一个基本的 Normalizer 实现,负责将对象 normalize 成标准化的格式。ItemNormalizer 则是 Api Platform 框架提供的 Normalizer 实现,负责将对象 normalize 成标准化的格式,并且支持 IRI 信息的设置。 Serializer 则是一个组件,负责将对象 serialize 成指定的格式。 Symfony 框架提供了多种 Serializer 实现,例如 JsonEncoder、XmlEncoder 等。Serializer 组件会根据 Normalizer 的输出结果,将对象 serialize 成指定的格式。 现在,让我们回到问题的核心。我们创建了一个自定义的 Normalizer,即 PostNormalizer,並在获取文章数据时添加了文章的封面图像链接,然后在创建文章资源时自动的为文章设置文章作者。然而,当我们使用第三个接口来获取 id 为 20 的文章时,点击 Execute,发现获取到的文章数据缺少了 @context、@id 和 @type 这三项,也就是数据的 IRI 信息不见了。 问题的根源在于,我们使用的 Normalizer 不是 Api Platform 提供的 Normalizer,而是 Symfony 的 ObjectNormalizer。ObjectNormalizer 不支持 IRI 信息的设置,因此我们需要使用 Api Platform 提供的 Normalizer。 我们可以使用 Api Platform 提供的 ItemNormalizer,它支持 IRI 信息的设置。我们可以在控制台中查看容器中所有的 Normalizer,输入 symfony console debug:container,关键字输入 normalizer。我们可以看到有多种 Normalizer 实现,其中包括 ItemNormalizer。 我们可以让自定义的 Normalizer 实现 NormalizerAwareInterface 接口,这样就可以使用 Api Platform 提供的 Normalizer 对象。然后,我们可以在自定义的 Normalizer 中使用 Serializer 对象执 normalize() 方法,这样就可以将数据 normalize 成标准化的格式,并且支持 IRI 信息的设置。 解决自定义 Normalizer 时 IRI 信息丢失的问题可以通过使用 Api Platform 提供的 Normalizer 实现和 Serializer 组件来实现。我们需要了解 Normalizer 和 Serializer 的基本概念,并且了解 Api Platform 提供的 Normalizer 实现和 Serializer 组件的使用方法。
- 粉丝: 30
- 资源: 319
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0