如何使用序列化器

编辑本页

如何使用序列化器

ob娱乐下载Symfony提供了一个序列化器,用于对对象和不同格式(例如JSON或XML)进行序列化/反序列化。在使用之前,请阅读序列化组件文档熟悉它的原理和标准化器和编码器术语。

安装

在使用ob娱乐下载Symfony Flex,执行此命令安装序列化器ob娱乐下载Symfony包使用前:

1
Composer需要symfonyob娱乐下载/serializer-pack

使用序列化器服务

一旦启用,序列化器服务可以被注入到任何需要它的服务中,也可以在控制器中使用:

12 3 4 5 6 7 8 9 10 11 12 13
/ / src /控制器/ DefaultController.php名称空间应用程序控制器使用ob娱乐下载FrameworkBundle控制器AbstractController使用ob娱乐下载组件序列化器SerializerInterfaceDefaultController扩展AbstractController公共函数指数(SerializerInterface序列化器//请继续阅读使用示例}}

或者你可以用序列化模板中的树枝过滤器:

1
{{object|serialize(format = 'json')}}

看到树枝参考获取更多信息。

添加标准化器和编码器

启用后,序列化器服务将在容器中可用。它自带一套有用的编码器而且标准化者

支持以下格式的编码器已启用:

以及以下归一化器:

其他内置的标准化者自定义归一化器和/或编码器也可以通过标记为来加载serializer.normalizer而且serializer.encoder.还可以设置标记的优先级以决定匹配顺序。

谨慎

总是要确保加载DateTimeNormalizer当序列化DateTimeDateTimeImmutable类,以避免过多的内存使用和暴露内部细节。

序列化器上下文

序列化器可以定义上下文来控制资源的(反)序列化。此上下文被传递给所有归一化器。例如:

你可以这样传递上下文:

1 2 3 4 5 6 7
序列化器->序列化(某物json的, [DateTimeNormalizer]::FORMAT_KEY = >Y-m-d H:我:年代”]);序列化器->反序列化(someJson的东西,::类,json的, [DateTimeNormalizer]::FORMAT_KEY = >Y-m-d H:我:年代”]);

你也可以通过框架配置来配置默认上下文:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
#配置/包/ framework.yaml框架:#……序列化器:default_context:enable_max_depth:真正的yaml_indentation:2

6.2

配置YAML缩进的选项在Symfony 6.2中引入。ob娱乐下载

你也可以在每个属性的基础上指定上下文:

  • 注释
  • 属性
  • YAML
  • XML
12 3 4 5 6 7 8 9 10 11 12 13 14
名称空间应用程序模型使用ob娱乐下载组件序列化器注释上下文使用ob娱乐下载组件序列化器标准化者DateTimeNormalizer/ * * *@Context({DateTimeNormalizer::FORMAT_KEY = 'Y-m-d'}) */公共createdAt/ /……

使用这些选项指定特定于规范化或反规范化的上下文:

12 3 4 5 6 7 8 9 10 11 12 13 14 15
名称空间应用程序模型使用ob娱乐下载组件序列化器注释上下文使用ob娱乐下载组件序列化器标准化者DateTimeNormalizer#(上下文(normalizationContext:(DateTimeNormalizer::FORMAT_KEY = >“Y-m-d”, denormalizationContext: [DateTimeNormalizer .::FORMAT_KEY => \日期时间::RFC3339))公共createdAt/ /……

你也可以限制上下文的使用到一些组:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
名称空间应用程序模型使用ob娱乐下载组件序列化器注释上下文使用ob娱乐下载组件序列化器注释使用ob娱乐下载组件序列化器标准化者DateTimeNormalizer#(团体((“扩展”)))#[Context([DateTimeNormalizer::FORMAT_KEY => \DateTime::RFC3339])]#(上下文(背景:[DateTimeNormalizer::FORMAT_KEY => \日期时间::RFC3339_EXTENDED],组:[“扩展”),)公共createdAt/ /……

属性/注释可以根据需要在单个属性上重复。首先应用没有组的上下文。然后,匹配组的上下文按照所提供的顺序合并。

使用上下文构建器

6.1

在Symfony 6.1中引入了上下文构建器。ob娱乐下载

要定义(反)序列化上下文,你可以使用“上下文构建器”,它是通过提供自动补全、验证和文档来帮助你创建上下文的对象:欧宝官网下载app

1 2 3 4
使用ob娱乐下载组件序列化器上下文标准化者DateTimeNormalizerContextBuildercontextBuilder= (DateTimeNormalizerContextBuilder ())->withFormat (Y-m-d H:我:年代”);序列化器->序列化(某物json的contextBuilder->toArray ());

每个规范化器/编码器都有其相关的上下文建设者.要创建更复杂的(反)序列化上下文,可以使用withContext ()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载组件序列化器上下文编码器CsvEncoderContextBuilder使用ob娱乐下载组件序列化器上下文标准化者ObjectNormalizerContextBuilderinitialContext= (“custom_key”= >“custom_value”,);contextBuilder= (ObjectNormalizerContextBuilder ())->withContext (initialContext->withGroups ([“group1”“group2”]);contextBuilder= (CsvEncoderContextBuilder ())->withContext (contextBuilder->withDelimiter (“;”);序列化器->序列化(某物“csv”contextBuilder->toArray ());

你也可以创建上下文构建器为自定义上下文值提供自动补全、验证和文档。欧宝官网下载app

使用序列化组属性

你可以添加#(组)的属性致您的班级:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src /实体/ Product.php名称空间应用程序实体使用学说ORM映射作为ORM使用ob娱乐下载组件序列化器注释# (ORM \实体)产品# (ORM \ Id)# (ORM \ GeneratedValue)# (ORM \列(类型:“整数”))#(组([' show_product ', ' list_product ']))私人id#[ORM\列(类型:'string',长度:255)]#(组([' show_product ', ' list_product ']))私人的名字# (ORM \列(类型:“整数”))#(团体([' show_product ']))私人描述;}

你现在可以选择在序列化时使用哪些组:

1 2 3 4 5 6 7
使用ob娱乐下载组件序列化器上下文标准化者ObjectNormalizerContextBuilder上下文= (ObjectNormalizerContextBuilder ())->withGroups (“show_product”->toArray ();json序列化器->序列化(产品json的上下文);

提示

的值Key可以是单个字符串,也可以是字符串数组。

除了#(集团)属性,Serializer组件也支持YAML或XML文件。当这些文件被存储在以下位置之一时,会自动加载:

  • 所有* .yaml而且* . xml文件配置/序列化器/目录中。
  • serialization.yamlserialization.xml资源/ config /包的目录;
  • 所有* .yaml而且* . xml文件资源/ config /序列化/包的目录。

使用嵌套属性

要映射嵌套属性,请使用SerializedPath配置来定义它们的路径有效的PropertyAccess语法

  • 注释
  • 属性
  • YAML
  • XML
12 3 4 5 6 7 8 9 10 11 12 13
名称空间应用程序模型使用ob娱乐下载组件序列化器注释SerializedPath/ * * *@SerializedPath(“[简介][信息][生日]”)* /私人字符串生日/ /……

6.2

的选项SerializedPath在Symfony 6.2中引入。ob娱乐下载

使用上面的配置,使用元数据感知来反规范化
Normalizer将写入生日字段元数据
对象:

1 2 3 4 5 6 7 8 9
数据= (“配置文件”= > [“信息”= > [“生日”= >“01-01-1970”,],],];标准化者->denormalize (数据,人::类,“任何”);->getBirthday ();/ / 01-01-1970

在使用注释或属性时,SerializedPath可以
在属性或关联的_getter_方法上设置。的SerializedPath不能与SerializedName对于相同的性质。

配置元数据缓存

序列化器的元数据被自动缓存以增强应用程序性能。默认情况下,序列化器使用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”

进一步使用序列化器

API的平台提供一个API系统,支持以下格式:

它构建在Symfony Framework及其Serob娱乐下载ializer组件之上。它提供了自定义规范化器、自定义编码器、自定义元数据和缓存系统。

如果您想充分利用Symfony Serializer组件的全部功能,请看看这个包是如何工作的ob娱乐下载。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop