如何使用序列化器
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何使用序列化器
ob娱乐下载Symfony提供了一个序列化器,用于对对象和不同格式(例如JSON或XML)进行序列化/反序列化。在使用之前,请阅读序列化组件文档熟悉它的原理和标准化器和编码器术语。
使用序列化器服务
一旦启用,序列化器服务可以被注入到任何需要它的服务中,也可以在控制器中使用:
12 3 4 5 6 7 8 9 10 11 12 13
/ / src /控制器/ DefaultController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\序列化器\SerializerInterface;类DefaultController扩展AbstractController{公共函数指数(SerializerInterface$序列化器){//请继续阅读使用示例}}
添加标准化器和编码器
启用后,序列化器
服务将在容器中可用。它自带一套有用的编码器而且标准化者.
支持以下格式的编码器已启用:
- JSON:JsonEncoder
- XML:XmlEncoder
- CSV:CsvEncoder
- YAML:YamlEncoder
以及以下归一化器:
- ObjectNormalizer来处理典型的数据对象
- DateTimeNormalizer对于实现DateTimeInterface接口
- DateTimeZoneNormalizer为DateTimeZone时区对象
- DateIntervalNormalizer为DateInterval对象
- DataUriNormalizer转换SplFileInfo对象数据uri
- FormErrorNormalizer对于实现FormInterface规范化表单错误。
- JsonSerializableNormalizer处理实现JsonSerializable接口
- ArrayDenormalizer使用象。这样的符号来反规格化对象数组
MyObject []
(注意[]
后缀) - ConstraintViolationListNormalizer对于实现ConstraintViolationListInterface接口
- ProblemNormalizer为FlattenException对象
自定义规范化器和/或编码器也可以通过标记为来加载serializer.normalizer而且serializer.encoder.还可以设置标记的优先级以决定匹配顺序。
谨慎
总是要确保加载DateTimeNormalizer
当序列化DateTime
或DateTimeImmutable
类,以避免过多的内存使用和暴露内部细节。
下面是一个关于如何加载GetSetMethodNormalizer,当数据对象总是使用getter时,' ObjectNormalizer '的一个更快的替代方案(getXxx ()
), issers (isXxx ()
)或骚扰者(hasXxx ()
)读取属性和setter (setXxx ()
)以更改属性:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/ services.yaml服务:get_set_method_normalizer:类:ob娱乐下载Symfony \组件\ \标准化者\ GetSetMethodNormalizer进行序列化标签:(serializer.normalizer)
使用序列化组注释
要使用注释,首先要通过sensioframeworkextrabundance添加对它们的支持:
1
$Composer需要sensio/framework-extra-bundle
接下来,添加@Groups注释致您的班级:
12 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
/ / src /实体/ Product.php名称空间应用程序\实体;使用学说\ORM\映射作为ORM;使用ob娱乐下载\组件\序列化器\注释\组;/ * * *@ORM() * / \实体类产品{/ * * *@ORM\ Id *@ORM\ GeneratedValue *@ORM\列(type =“整数”)*@Groups({"show_product", "list_product"}) */私人$id;/ * * *@ORM\列(type="string", length=255) *@Groups({"show_product", "list_product"}) */私人$的名字;/ * * *@ORM\列(type =“整数”)*@Groups({}“show_product”)* /私人$描述;}
你现在可以选择在序列化时使用哪些组:
1 2 3 4 5
$json=$序列化器->序列化($产品,json的, (“组织”= >“show_product”]);
提示
的值组
Key可以是单个字符串,也可以是字符串数组。
除了@Groups
注释,Serializer组件也支持YAML或XML文件。当这些文件被存储在以下位置之一时,会自动加载:
- 所有
* .yaml
而且* . xml
文件配置/序列化器/
目录中。 - 的
serialization.yaml
或serialization.xml
在资源/ config /
包的目录; - 所有
* .yaml
而且* . xml
文件资源/ config /序列化/
包的目录。
配置元数据缓存
序列化器的元数据被自动缓存以增强应用程序性能。默认情况下,序列化器使用cache.system
缓存池cache.system选择。
启用名称转换器
使用名字转换器服务可以在配置中使用name_converter选择。
内置的CamelCase到snake_case名称转换器可以通过使用serializer.name_converter.camel_case_to_snake_case
值:
- YAML
- XML
- PHP
1 2 3 4 5
#配置/包/ framework.yaml框架:#……序列化器:name_converter:“serializer.name_converter.camel_case_to_snake_case”