【发布时间】:2022-08-11 07:51:33
【问题描述】:
在我的 Symfony 6 项目中,我使用 symfony Serializer 和这个配置。
# config/packages/framework.yaml
framework:
serializer:
name_converter: \'serializer.name_converter.camel_case_to_snake_case\'
enable_annotations: true
default_context:
datetime_format: Y-m-d
annotations:
enabled: true
我期待 #[Ignore] 属性从 json 中排除字段。但它没有效果。
class Event {
#[ORM\\Id]
#[ORM\\GeneratedValue]
#[ORM\\Column(type: \'integer\')]
#[Ignore]
private $id;
...
}
我还尝试根据attributes-groups 和ignoring-attributes 在控制器中定义序列化程序,但结果仍然相同。
$classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader()));
$serializer = new Serializer([new ObjectNormalizer($classMetadataFactory)],[new JsonEncoder()]);
return new JsonResponse($serializer->serialize($events,\'json\'));
我错过了什么,或者为什么它不排除基于 Ignore 属性的字段? 是否可以只使用 xml 配置来激活 Ignore 属性?
\"datetime_format\" 更改输出日期时间格式,但 \"name_converter\" 也不会将字段名称从 camelCase 更改为 sanke_case。
我想原因可能是GetSetMethodNormalizer 与ObjectNormalizer 相比具有更高的优先级,并且它不使用序列化器配置。
标签: symfony