我想按照此处的doc中的“示例”对数据进行非规范化处理,但始终返回false 的supportNormalization方法AbstractItemNormalizer。
由于该文档对应该做什么以及如何做完全没有帮助,有人可以在这里帮助我吗?我找不到任何可行的示例。
首先我们可以从方法的定义中看到:
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
当此规范化器不支持false您的$data规范化时,此方法返回。而且只有在此方法返回时,true您的normalize方法才会被调用。
该第一参数supportNormalization接收是格式例如json,jsonapi,jsonhal等。
因此,如果您的api_platform.yaml配置中包含以下内容:
api_platform:
formats:
jsonld: ['application/ld+json']
Run Code Online (Sandbox Code Playgroud)
但是您在services.yaml注册服务中:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ '@api_platform.serializer.normalizer.item' ]
Run Code Online (Sandbox Code Playgroud)
supportNormalization将始终返回false,因为您的注入/装饰规范化器不支持jsonld,并且您需要:
services:
'App\Serializer\CustomItemNormalizer':
arguments: [ 'api_platform.jsonld.normalizer.item' ]
Run Code Online (Sandbox Code Playgroud)
在这里,您可以获得特定格式的可用序列化程序的列表(文档中缺少JSONAPI的序列化程序)。
在大多数情况下,我仅使用(de)normalizer来更改/添加一些数据,但是如果您装饰了normalizer,则可以这样做:
services:
'App\Serializer\CustomItemNormalizer':
decorates: 'api_platform.jsonld.normalizer.item'
arguments: [ '@App\Serializer\CustomItemNormalizer.inner' ]
Run Code Online (Sandbox Code Playgroud)
链接到装饰序列化器并添加额外的数据。
因此,最后需要注入正确的规范化器并进行装饰。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |