如何创建自定义标准化者

编辑该页面

如何创建自定义标准化者

序列化器组件使用标准化者将任何数据转换成一个数组。该组件提供了几个内置的标准化者但是你可能需要创建自己的标准化者将一个不受支持的数据结构。

创建一个新的标准化者

想象一下你想要添加、修改或删除一些性质在序列化过程中。,你必须创建自己的标准化者。但通常比让Symfony标准化对象,然后钩到自定义规范化数据的标准化。ob娱乐下载为此,利用ObjectNormalizer:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36
/ / src /序列化器/ TopicNormalizer.php名称空间应用程序\序列化器;使用应用程序\实体\主题;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\序列化器\标准化者\ContextAwareNormalizerInterface;使用ob娱乐下载\组件\序列化器\标准化者\ObjectNormalizer;TopicNormalizer实现了ContextAwareNormalizerInterface{私人美元路由器;私人美元标准化者;公共函数__construct(UrlGeneratorInterface美元路由器,ObjectNormalizer美元标准化者){美元- >路由器=美元路由器;美元- >标准化者=美元标准化者;}公共函数正常化(美元主题、字符串美元格式= null,数组美元上下文= []){美元数据=美元- >标准化者- >正常化(美元主题,美元格式,美元上下文);/ /在这里添加、编辑或删除一些数据:美元数据(“href”][“自我”]=美元- >路由器- >生成(“topic_show”,(“id”= >美元主题- >getId ()), UrlGeneratorInterface::ABSOLUTE_URL);返回美元数据;}公共函数supportsNormalization(美元数据、字符串美元格式= null,数组美元上下文= []){返回美元数据运算符主题;}}

在您的应用程序注册它

之前使用这种标准化者在Symfony应用程序必须注册为一个服务ob娱乐下载标记serializer.normalizer。如果你使用默认的服务。yaml的配置,这是自动完成!

性能

数字标准化者(或denormalizer)必须用于处理一个对象,序列化器类将调用supportsNormalization ()(或supportsDenormalization ())的所有注册标准化者(或denormalizers)在一个循环中。

这些方法的结果取决于对象序列化,格式和上下文。这就是为什么结果不是缓存默认情况下,会导致显著的性能瓶颈。

然而,大多数标准化者(和denormalizers)始终返回相同的结果当对象的类型和格式是相同的,所以可以缓存的结果。这样做,使这些标准化者(和denormalizers)实现的CacheableSupportsMethodInterface并返回真正的hasCacheableSupportsMethod ()被称为。

请注意

所有内置标准化者和denormalizers也包括在的API的平台本机实现这个接口。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs