如何使用序列化器吗
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
如何使用序列化器吗
在进行序列化和反序列化对象和不同格式(例如JSON或XML)是一个非常复杂的话题。欧宝娱乐app下载地址Symfony提供了序列化器组件给你一些工具,您可以利用您的解决方案。
事实上,在你开始之前,熟悉序列化器,标准化者和编码器通过阅读序列化器组件。
激活序列化器
的序列化器
默认服务不可用。打开它,激活它在您的配置:
- YAML
- XML
- PHP
1 2 3 4 5 6
# app / config / config.yml框架:#……序列化器:{enable_annotations:真正的}#或者,如果你不想使用注释#序列化器:{启用:真}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
< !- - - - - -- - - - - -app/config/config.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置>< !- - - - - -- - - - - -。。。- - ><框架:序列化器enable-annotations=“真正的”/ >< !- - - - - -- - - - - -Alternatively, if you don't want to use annotations -->< /span>< /框架:配置>< /容器>
1 2 3 4 5 6 7 8 9
/ / app / config / config . php美元容器- >loadFromExtension (“框架”,数组(/ /……“序列化器”= >数组(“enable_annotations”= >真正的,/ /或者,如果你不想使用注释/ /“启用”= >真的,)));
使用序列化器服务
一旦启用,序列化器
服务可以被注入在你需要的任何服务或可用于控制器如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src / AppBundle /控制器/ DefaultController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\控制器;类DefaultController扩展控制器{公共函数indexAction(){美元序列化器=美元这- >get (“序列化器”);/ /……}}
添加标准化者和编码器
一旦启用,序列化器
服务将在容器和将装有四个编码器(JsonEncoder,XmlEncoder,YamlEncoder,CsvEncoder)和ObjectNormalizer标准化者。
你可以加载标准化者和/或编码器通过标记他们serializer.normalizer和serializer.encoder。还可以设置的优先级标记为了决定匹配的顺序。
这里有一个例子如何加载GetSetMethodNormalizer:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
# app / config / services.yml服务:get_set_method_normalizer:类:欧宝娱乐app下载地址Symfony \组件\ \标准化者\ GetSetMethodNormalizer进行序列化公众:假标签:- - - - - -{名称:serializer.normalizer}
1 2 3 4 5 6 7 8 9 10 11 12 13
< !- - - - - -- - - - - -app/config/services.xml -->< /span>< ?xml version = " 1.0 " 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 //www.oldmanjams.com/schema/dic/services/services-1.0.xsd”><服务><服务id=“get_set_method_normalizer”类=“欧宝娱乐app下载地址Symfony \序列化器\ \组件标准化者\ GetSetMethodNormalizer”公共=“假”><标签的名字=“serializer.normalizer”/ >< /服务>< /服务>< /容器>
1 2 3 4 5 6 7
/ / app / config / services.php使用欧宝娱乐app下载地址\组件\序列化器\标准化者\GetSetMethodNormalizer;美元容器- >注册(“get_set_method_normalizer”,GetSetMethodNormalizer::类)- >setPublic (假)- >addTag (“serializer.normalizer”);
使用串行化组注释
启用序列化组注释使用以下配置:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / config.yml框架:#……序列化器:enable_annotations:真正的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
< !- - - - - -- - - - - -app/config/config.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置>< !- - - - - -- - - - - -。。。- - ><框架:序列化器enable-annotations=“真正的”/ >< /框架:配置>< /容器>
1 2 3 4 5 6 7
/ / app / config / config . php美元容器- >loadFromExtension (“框架”,数组(/ /……“序列化器”= >数组(“enable_annotations”= >真正的)));
接下来,添加@Groups注释你的类和序列化时选择使用哪一个组:
1 2 3 4 5
美元序列化器=美元这- >get (“序列化器”);美元json=美元序列化器- >序列化(美元someObject,json的,数组(“组织”= >数组(“group1”)));
除了@Groups
注释,序列化器组件还支持Yaml或XML文件。这些文件被存储在一个时自动加载以下位置:
- 的
serialization.yml
或serialization.xml
文件资源/ config /
包的目录; - 所有
* .yml
和* . xml
文件资源/ config /序列化/
目录的一个包。
使元数据缓存
元数据使用的序列化器组件,如团体可以缓存来提高应用程序的性能。任何服务实现学说\常见\缓存\缓存
可以使用接口。
一个服务利用APCu(和APC PHP内置< 5.5)。
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / config_prod.yml框架:#……序列化器:缓存:serializer.mapping.cache.apc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
< !- - - - - -- - - - - -app/config/config_prod.xml -->< /span>< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:框架=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/symfony”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/symfony //www.oldmanjams.com/schema/dic/symfony/symfony-1.0.xsd”><框架:配置>< !- - - - - -- - - - - -。。。- - ><框架:序列化器缓存=“serializer.mapping.cache.apc”/ >< /框架:配置>< /容器>
1 2 3 4 5 6 7
/ / app / config / config_prod.php美元容器- >loadFromExtension (“框架”,数组(/ /……“序列化器”= >数组(“缓存”= >“serializer.mapping.cache.apc”)));
使一个名字转换器
的使用名字转换器服务可以被定义在配置使用name_converter选择。
内置的CamelCase转换器snake_case名称可以通过使用吗serializer.name_converter.camel_case_to_snake_case
值:
- YAML
- XML
- PHP
1 2 3 4 5
# app / config / config.yml框架:#……序列化器:name_converter:“serializer.name_converter.camel_case_to_snake_case”
1 2 3 4 5
< !- - - - - -- - - - - -app/config/config.xml -->< /span><框架:配置>< !- - - - - -- - - - - -。。。- - ><框架:序列化器name-converter=“serializer.name_converter.camel_case_to_snake_case”/ >< /框架:配置>
1 2 3 4 5 6 7
/ / app / config / config . php美元容器- >loadFromExtension (“框架”,数组(/ /……“序列化器”= >数组(“name_converter”= >' serializer.name_converter.camel_case_to_snake_case,)));
更进一步的序列化器
ApiPlatform提供了一个API系统支持JSON-LD和九头蛇核心词汇超媒体格式。它是建立在Symfony框架及其序列化器组件。欧宝娱乐app下载地址它提供了定制的标准化者和一个定制的编码器,定制的元数据和缓存系统。
如果你想利用Symfony序列化器组件的全部威力,看看这个包是如何工作的。欧宝娱乐app下载地址