新在Symfoob娱乐下载ny 4.1:从抽象类进行序列化和反序列化
2018年1月18日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
在处理对象非常相似或分享大量的属性,通常使用接口或抽象类。类的问题从其他抽象类是扩展序列化器组件不知道如何正确地进行序列化/反序列化它们。
在Syob娱乐下载mfony 4.1中,我们改进了序列化器组件来支持这个功能使用“鉴频器类映射”。考虑一个应用程序,该应用程序定义了一个抽象的CodeRepository
类延长GitHubCodeRepository
和BitBucketCodeRepository
类。这个例子展示了如何进行序列化和反序列化这些对象在使用独立的序列化器组件:
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
/ /……美元鉴频器=新ClassDiscriminatorResolver ();/ /美元类型是用于区分的属性类美元鉴频器- >addClassMapping (CodeRepository::类,新ClassDiscriminatorMapping (“类型”,(github的= > GitHubCodeRepository::类,“bitbucket都”= > BitBucketCodeRepository::类,]));/ /通过鉴别器的最后一个参数标准化者美元序列化器=新序列化器(数组(新ObjectNormalizer (零,零,零,零,美元鉴频器)),数组(json的= >新JsonEncoder ()));/ /序列化时,鉴别器知道“类型”的价值/ / GitHubCodeRepository类的属性必须设置为{“类型”:“github”}美元序列化=美元序列化器- >序列化(新GitHubCodeRepository ());/ /反序列化成抽象CodeRepository类时,鉴别器/ /使用“类型”的美元价值知道库必须GitHubCodeRepository的实例美元存储库=美元序列化器- >unserialize (美元序列化,CodeRepository::类,json的);
当使用这个特性在Symfony应用程序中,您可以配置所有这ob娱乐下载些在YAML或XML文件,甚至使用PHP注释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
名称空间应用程序\存储库;使用ob娱乐下载\组件\序列化器\注释\DiscriminatorMap;/ * * *@DiscriminatorMap(typeProperty =“类型”,映射= {*“github”=“App \ Repository \ GitHubCodeRepository”*“bitbucket都”=“App \ Repository \ BitBucketCodeRepository”*}) * /接口CodeRepository{/ /……}
你可以阅读更多关于这个新特性的序列化接口和抽象类部分序列化器组件的文档。欧宝官网下载app
发表在#生活在边缘
评论
伊凡Kurnosov
说1月19日,2018年在03:21
@Timo福斯特:更少的代码维护,庆祝它:-)
Gocha Ossinkine
说1月19日,2018年在09:12
“新ObjectNormalizer(空,空,空,空,鉴频器)”
你觉得味道吗?
你觉得味道吗?
评论都关门了。
以确保评论保持相关,他们关闭了旧的帖子。
有一个小错误:使用一个“判别式函数类映射”(应该是鉴别器)
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now