在使用ApiPlatform和Symfony Serializer的过程中,经常需要为外部对象设置不同的序列化组,以满足不同的业务需求。本文将介绍如何通过Yaml配置文件来设置序列化组。
App\Entity\Product:
attributes:
normalization_context:
groups: ['read']
denormalization_context:
groups: ['write']
# api/config/packages/api_platform.yaml
api_platform:
# ...
mapping:
paths: ['%kernel.project_dir%/config/api_platform']
# config/packages/core.yaml
services:
App\Dto\ProductDto:
tags:
- { name: serializer.normalizer, priority: 0 }
- { name: api_platform.normalizer }
arguments: ['@App\Serializer\Normalizer\ProductNormalizer']
# config/packages/serializer.yaml
framework:
serializer:
mapping:
paths:
- '%kernel.project_dir%/config/serializer'
enable_annotations: false
namespace App\Serializer\Normalizer;
use App\Dto\ProductDto;
use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface;
class ProductNormalizer implements ContextAwareNormalizerInterface
{
public function normalize($object, $format = null, array $context = [])
{
$groups = isset($context['groups']) ? $context['groups'] : [];
// ...
}
public function supportsNormalization($data, $format = null, array $context = [])
{
return $data instanceof ProductDto;
}
}
通过以上步骤,就可以轻松实现在使用ApiPlatform和Symfony Serializer的过程中,为外部对象设置不同的序列化组了。