使用自定义规范化器和规范化支持
Use custom normalizer and normalization support
我想按照文档 here 中的 "example" 规范化我的数据,但是 AbstractItemNormalizer
的 supportNormalization
方法总是 returns 错误。
由于文档对应该做什么以及如何做完全没有帮助,有人可以在这里帮助我吗?我在任何地方都找不到工作示例。
首先从方法的定义我们可以看出:
/**
* 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
规范化时,此方法 returns false
。并且只有当这个方法 returns true
你的 normalize
方法才会被调用。
supportNormalization
接收到的第一个参数是格式,例如json
、jsonapi
、jsonhal
等
因此,如果您在 api_platform.yaml
配置中有如下内容:
api_platform:
formats:
jsonld: ['application/ld+json']
但是您在 services.yaml
注册服务中:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ '@api_platform.serializer.normalizer.item' ]
supportNormalization
将始终 return false
,因为您的 inject/decorate 标准化器不支持 jsonld
,并且您需要:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ 'api_platform.jsonld.normalizer.item' ]
这里有一个 list of available serializers for specific format 的列表(文档中缺少 JSONAPI 的序列化程序)。
在大多数情况下,我只对 change/add 一些数据使用(去)规范化器,但如果你修饰规范化器,这是可能的:
services:
'App\Serializer\CustomItemNormalizer':
decorates: 'api_platform.jsonld.normalizer.item'
arguments: [ '@App\Serializer\CustomItemNormalizer.inner' ]
Link 到 decorating a serializer and adding extra data.
所以最后你需要注入正确的标准化器并装饰它。
我想按照文档 here 中的 "example" 规范化我的数据,但是 AbstractItemNormalizer
的 supportNormalization
方法总是 returns 错误。
由于文档对应该做什么以及如何做完全没有帮助,有人可以在这里帮助我吗?我在任何地方都找不到工作示例。
首先从方法的定义我们可以看出:
/**
* 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
规范化时,此方法 returns false
。并且只有当这个方法 returns true
你的 normalize
方法才会被调用。
supportNormalization
接收到的第一个参数是格式,例如json
、jsonapi
、jsonhal
等
因此,如果您在 api_platform.yaml
配置中有如下内容:
api_platform:
formats:
jsonld: ['application/ld+json']
但是您在 services.yaml
注册服务中:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ '@api_platform.serializer.normalizer.item' ]
supportNormalization
将始终 return false
,因为您的 inject/decorate 标准化器不支持 jsonld
,并且您需要:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ 'api_platform.jsonld.normalizer.item' ]
这里有一个 list of available serializers for specific format 的列表(文档中缺少 JSONAPI 的序列化程序)。
在大多数情况下,我只对 change/add 一些数据使用(去)规范化器,但如果你修饰规范化器,这是可能的:
services:
'App\Serializer\CustomItemNormalizer':
decorates: 'api_platform.jsonld.normalizer.item'
arguments: [ '@App\Serializer\CustomItemNormalizer.inner' ]
Link 到 decorating a serializer and adding extra data.
所以最后你需要注入正确的标准化器并装饰它。