Symfonyob娱乐下载 4.1新增功能:序列化器改进
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
增加了一个ConstraintViolationListNormalizer
提供的
格雷戈勒Pineau
在# 22150.
当使用Symfony开发api时,通常使用这样的代码ob娱乐下载:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ * * *@Route("/blog/new", name="api_blog_new") *@Method(“文章”)*@Security(“is_granted (ROLE_ADMIN)”)* /公共函数新(请求$请求, SerializerInterface$序列化器, ValidatorInterface$验证器){$数据=$请求->getContent ();$帖子=$序列化器->反序列化($数据,后::类,json的, (“组织”= > [“post_write”]]);$帖子->setAuthor ($这->getUser ());$违反=$验证器->validate ($帖子);如果(数($违反) >0) {$repr=$序列化器->序列化($违反,json的);返回JsonResponse::fromJsonString ($repr,400);}/ /……}
的美元的侵犯
变量包含ConstraintViolationList
对象,通常将其转换为错误列表并序列化该列表以将其包含在JSON响应中。这就是为什么在Symfonyob娱乐下载 4.1中我们添加了一个ConstraintViolationListNormalizer
它会自动帮你完成。归一化器跟随RFC 7807规范来生成错误列表。
以集合的形式获取XML和CSV结果
提供的
哈姆萨Amrouche
在# 25218而且# 25369.
的CsvEncoder
而且XmlEncoder
现在定义一个新的配置选项as_collection
.如果你将该选项作为context参数的一部分传递,并将其设置为真正的
,结果将是一个集合。
用于反规格化的默认构造函数参数
如果类的构造函数定义了参数,就像使用值对象时通常发生的那样,序列化器将无法创建对象。在Syob娱乐下载mfony 4.1中,我们引入了一个新的default_constructor_arguments
上下文选项来解决这个问题。
在下面的例子中,两者都有喷火
而且酒吧
是否只需要构造函数参数喷火
提供。的价值酒吧
是从default_constructor_arguments
选择:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
使用ob娱乐下载\组件\序列化器\序列化器;使用ob娱乐下载\组件\序列化器\标准化者\ObjectNormalizer;类MyObj{私人$喷火;私人$酒吧;公共函数__construct($喷火,$酒吧){$这->foo =$喷火;$这->酒吧=$酒吧;}}$标准化者=新ObjectNormalizer ($classMetadataFactory);$序列化器=新序列化器(数组($标准化者));//这相当于$data = new MyObj('Hello', ");$数据=$序列化器->denormalize ([“foo”= >“你好”),“MyObj”, (“default_constructor_arguments”= > [“MyObj”= > [“foo”= >”,“酒吧”= >”],]]);
增加了一个MaxDepth
处理程序
有时候,当达到配置的最大深度时,与其停止序列化进程,不如让开发人员处理这种情况以返回一些东西(例如实体的标识符)。
在Syob娱乐下载mfony 4.1中,您可以使用new来定义自定义处理程序来解决这个问题setMaxDepthHandler ()
方法:
12 34 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 32 33 34 35 36 37 38 39 40 41 42 43
使用学说\常见的\注释\AnnotationReader;使用ob娱乐下载\组件\序列化器\序列化器;使用ob娱乐下载\组件\序列化器\注释\MaxDepth;使用ob娱乐下载\组件\序列化器\映射\工厂\ClassMetadataFactory;使用ob娱乐下载\组件\序列化器\映射\加载程序\AnnotationLoader;使用ob娱乐下载\组件\序列化器\标准化者\ObjectNormalizer;类喷火{公共$id;/**@MaxDepth(1) * /公共$孩子;}$使有效=新Foo ();$使有效->id =1;$二级=新Foo ();$二级->id =2;$使有效->孩子=$二级;$level3=新Foo ();$level3->id =3.;$二级->孩子=$level3;$classMetadataFactory=新ClassMetadataFactory (新AnnotationLoader (新AnnotationReader ()));$标准化者=新ObjectNormalizer ($classMetadataFactory);$标准化者->setMaxDepthHandler (函数($喷火){返回“/ foo /”.$喷火->id;});$序列化器=新序列化器(数组($标准化者));$结果=$序列化器->正常化($使有效,零,数组(ObjectNormalizer::ENABLE_MAX_DEPTH = >真正的));/ * $ =结果数组(“id”= > 1,'孩子' = > [id = > 2, '孩子' = > ' / foo / 3 ',]];* /
解码XML时忽略注释
提供的
詹姆斯Sansbury
在# 26445.
在以前的Symfony版ob娱乐下载本中,在解码内容时处理XML注释。此外,如果XML内容的第一行是注释,则将其用作已解码XML的根节点。
在Syob娱乐下载mfony 4.1中,默认情况下会删除XML注释,但是你可以通过新的可选的第三个构造函数参数来控制这种行为:
1 2 3 4 5 6 7 8 9 10
类XmlEncoder{公共函数__construct(字符串$rootNodeName=“响应”, int$loadOptions= null,数组$ignoredNodeTypes=数组(XML_PI_NODE XML_COMMENT_NODE)){/ /……}}
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
Sebastiaan Stok is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now