gpt4 book ai didi

api-platform.com - 使用自定义规范化器和规范化支持

转载 作者:行者123 更新时间:2023-12-05 01:26:34 26 4
gpt4 key购买 nike

我想按照文档 here 中的“示例”对我的数据进行(反)规范化, 但 AbstractItemNormalizersupportNormalization 方法总是返回 false。

由于文档对应该做什么以及如何做完全没有帮助,有人可以在这里帮助我吗?我在任何地方都找不到工作示例。

最佳答案

首先从方法的定义我们可以看出:

/**
* Checks whether the given class is supported for normalization by this normalizer.
*
* @param mixed $data Data to normalize
* @param string $format The format being (de-)serialized from or into
*
* @return bool
*/
public function supportsNormalization($data, $format = null);

当您的 $data 规范化不受此规范化器支持时,此方法返回 false。只有当此方法返回 true 时,您的 normalize 方法才会被调用。

supportNormalization 接收的第一个参数是格式,例如jsonjsonapijsonhal

因此,如果您在 api_platform.yaml 配置中有如下内容:

api_platform:
formats:
jsonld: ['application/ld+json']

但是你在你的services.yaml注册服务:

services:
'App\Serializer\CustomItemNormalizer':
arguments: [ '@api_platform.serializer.normalizer.item' ]

supportNormalization 将始终返回 false,因为您的 inject/decorate normalizer 不支持 jsonld,您需要:

services:
'App\Serializer\CustomItemNormalizer':
arguments: [ 'api_platform.jsonld.normalizer.item' ]

这里有一个 list of available serializers for specific format 的列表(文档中缺少 JSONAPI 的序列化器)。

在大多数情况下,我使用(反)规范化器只是为了更改/添加一些数据,但如果你装饰规范化器,这是可能的:

services:
'App\Serializer\CustomItemNormalizer':
decorates: 'api_platform.jsonld.normalizer.item'
arguments: [ '@App\Serializer\CustomItemNormalizer.inner' ]

链接到 decorating a serializer and adding extra data .

所以最后你需要注入(inject)正确的标准化器并装饰它。

关于api-platform.com - 使用自定义规范化器和规范化支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com