如何使用序列化器

如何使用序列化器

欧宝娱乐app下载地址symfony提供序列化器,以序列化/反序列化到对象和不同格式(例如JSON或XML)。在使用之前,阅读Serializer组件Docs.熟悉其哲学和癌症和编码器术语。

安装

在应用中使用欧宝娱乐app下载地址Symfony Flex.,运行此命令安装序列化器欧宝娱乐app下载地址Symfony包在使用之前:

1
作曲家需要symfony / se欧宝娱乐app下载地址rializer-pack

使用Serializer服务

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

/ / src /控制器/ DefaultController.php命名空间App \ Controller.使用欧宝娱乐app下载地址symfony \ bundle \ frameworkbundle \ controller \ AbstractController使用欧宝娱乐app下载地址Symfony \ \序列化器\ SerializerInterface组件defaultController.延伸AbstractController上市函数指数SerializerInterface.美元的序列化器//继续阅读使用例子

添加归一化器和编码器

一旦启用,序列化器服务将在容器中可用。它带有一套有用的编码器癌症

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

  • JSON:欧宝娱乐app下载地址Symfony \组件\ \编码器\ JsonEncoder进行序列化
  • XML:欧宝娱乐app下载地址Symfony \组件\ \编码器\ XmlEncoder进行序列化
  • CSV:欧宝娱乐app下载地址Symfony \组件\ \编码器\ CsvEncoder进行序列化
  • yaml:欧宝娱乐app下载地址Symfony \组件\ \编码器\ YamlEncoder进行序列化

以及以下癌症:

  • 欧宝娱乐app下载地址symfony \ component \ serializer \ normenizer \ ObjectNormalizer处理典型的数据对象
  • 欧宝娱乐app下载地址Symfony \组件\ \标准化者\ DateTimeNormalizer进行序列化用于实现的物体DateTimeInterface接口
  • 欧宝娱乐app下载地址Symfony \组件\ \标准化者\ DateTimeZoneNormalizer进行序列化DateTimeZone时区对象
  • 欧宝娱乐app下载地址symfony \ component \ serializer \ promalizer \ dateIntervalNormAlizerDateInterval对象
  • 欧宝娱乐app下载地址symfony \ component \ serializer \ normenizer \ dataUrinormorizer改变SplFileInfo对象数据uri
  • 欧宝娱乐app下载地址symfony \ component \ serializer \ normenizer \ formarrornormalizer用于实现的物体欧宝娱乐app下载地址symfony \ component \ form \ forminterface规范化表单错误。
  • 欧宝娱乐app下载地址Symfony \组件\ \标准化者\ JsonSerializableNormalizer进行序列化处理实施的物体JsonSerializable接口
  • 欧宝娱乐app下载地址Symfony \ Component \ Serializer \ Normalizer \ ArrayDenormalizer使用类似的符号来反规范化对象数组myobject [](注意[]后缀)
  • 欧宝娱乐app下载地址Symfony \ Component \ Serializer \ Normalizer \ ContrameViroationListNormalizer用于实现的物体欧宝娱乐app下载地址Symfony \ \验证器\ ConstraintViolationListInterface组件接口
  • 欧宝娱乐app下载地址Symfony \组件\ \标准化者\ ProblemNormalizer进行序列化欧宝娱乐app下载地址Symfony \ Component \ ErrorHandler \异常\ FlattenException对象

自定义标准化器和/或编码器也可以通过将它们标记为来加载serializer.normalizerserializer.encoder.也可以设置标签的优先级以便决定匹配顺序。

警告

始终确保加载datetimenormalizer当序列化DateTimeDateTimeImmutable类以避免过度使用内存和暴露内部细节。

以下是如何加载的示例欧宝娱乐app下载地址Symfony \组件\ \标准化者\ GetSetMethodNormalizer进行序列化,更快的替代品ObjectNormalizer当数据对象始终使用getter时(getxxx())、伊塞(isxxx())或骚扰者(hasXxx ())读取属性和setter (setxxx())更改属性:

  • yaml.
    1 2 3 4 5
    #配置/服务.YAML服务get_set_method_normalizer欧宝娱乐app下载地址Symfony \组件\ \标准化者\ GetSetMethodNormalizer进行序列化标签serializer.normalizer
  • XML.
    1 2 3 4 5 6 7 8 9 10 11 12 13
    <! -  config / services.xml  - >< ?encoding="UTF-8"<容器xmlns =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi =“http://www.w3.org/2001/XMLSchema-instance”XSI:Schemalocation =“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services.https://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务ID =“get_set_method_normalizer”类=“欧宝娱乐app下载地址Symfony \序列化器\ \组件标准化者\ GetSetMethodNormalizer”><标签name =“serializer.normalizer”/>> < /服务
  • PHP
    1 2 3 4 5 6 7 8 9 10 11 12
    / /配置/ services.php命名空间欧宝娱乐app下载地址Symfony \ DependencyInjection \装载机\ \组件配置器使用欧宝娱乐app下载地址Symfony \组件\ \标准化者\ GetSetMethodNormalizer进行序列化返回函数containerconfigurator美元配置器$服务美元配置器->服务();$服务->“get_set_method_normalizer”getsetMethodnormalizer::->标签“serializer.normalizer”};

使用序列化组注释

要使用注解,首先要通过sensioframeworkextrabdle添加对它们的支持:

1
作曲家需要sensio赞助/ framework-extra-bundle

接下来,添加@groups注释到你的班级:

/ / src /实体/ Product.php命名空间应用程序\实体使用主义\ \ ORM映射作为orm.使用欧宝娱乐app下载地址Symfony \序列化器\注释\ \组件组/ * ** @orm \ entity()* /产品/ * ** @ORM \ Id* @orm \生成value* @orm \ column(type =“整数”)* @groups({“show_product”,“list_product”})* /私人$ id/ * ** @ORM \列(类型=“字符串”,长度= 255)* @groups({“show_product”,“list_product”})* /私人$名称/ * ** @orm \ column(type =“整数”)* @groups({“show_product”})* /私人$描述

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

json美元美元的序列化器->连载美元的产品json的“组织”=>'show_product');

提示

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

除了@groups.注释,Serializer组件也支持Yaml或XML文件。在存储在以下一个位置之一时,会自动加载这些文件:

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

配置元数据缓存

Serializer的元数据会自动缓存以增强应用程序性能。默认情况下,序列化器使用Cache.System.使用该缓存池配置Cache.System.选项。

启用名称转换器

a的使用名字转换器可以使用该服务在配置中定义name_converter选项。

内置的CamelCase到snake_case名称转换器可以通过使用它来启用serializer.name_converter.camel_case_to_snake_case值:

  • yaml.
    1 2 3 4 5
    #配置/包/ framework.yaml框架#……序列化器name_converter'serializer.name_converter.camel_case_to_snake_case'
  • XML.
    1 2 3 4 5
    <! - 配置/包/ framework.xml  - ><框架:配置><! -  ...  - >name-converter =“serializer.name_converter.camel_case_to_snake_case”/>< /框架:配置>
  • PHP
    1 2 3 4 5 6 7
    // config / packages / framework.php美元的容器->loadfromextension.“框架”// ......“序列化器”=>“name_converter”=>'serializer.name_converter.camel_case_to_snake_case'],]);

进一步使用序列化器

API平台提供支援下列格式的API系统:

它构建在Symfony框架及其Serializer组欧宝娱乐app下载地址件之上。它提供了定制的规范化器和定制的编码器、定制的元数据和缓存系统。

如果您想充分利用Symfony Serializer组件的强大功能,请看看这个包是如何工作的欧宝娱乐app下载地址。

这项工作包括代码样本,是在a下获得的许可创作共用BY-SA 3.0许可证。