如何创建您的自定义规范化
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
如何创建您的自定义规范化
的序列化器组件使用归一化器将任何数据转换为数组。该组件提供了几个内置的标准化者但是您可能需要创建自己的规范化器来转换不受支持的数据结构。
创建一个新的规范化器
假设您想在序列化过程中添加、修改或删除一些属性。为此,您必须创建自己的归一化器。但通常更可取的做法是让Symfony规范化对象,然后钩入规范化以自定义欧宝娱乐app下载地址规范化数据。要做到这一点,要利用ObjectNormalizer
:
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
名称空间AppBundle\序列化器;使用AppBundle\实体\主题;使用欧宝娱乐app下载地址\组件\路由\发电机\UrlGeneratorInterface;使用欧宝娱乐app下载地址\组件\序列化器\标准化者\NormalizerInterface;使用欧宝娱乐app下载地址\组件\序列化器\标准化者\ObjectNormalizer;类TopicNormalizer实现了NormalizerInterface{私人$路由器;私人$标准化者;公共函数__construct(UrlGeneratorInterface$路由器, ObjectNormalizer$标准化者){$这->路由器=$路由器;$这->标准化者=$标准化者;}公共函数正常化($主题,$格式= null,数组$上下文=数组()){$数据=$这->标准化者->正常化($主题,$格式,$上下文);//在这里,添加,编辑或删除一些数据:$数据[“href”] [“自我”] =$这->路由器->生成(“topic_show”,数组(“id”= >$主题->getId(),), UrlGeneratorInterface::ABSOLUTE_URL);返回$数据;}公共函数supportsNormalization($数据,$格式= null){返回$数据运算符主题;}}
在应用程序中注册它
为了在基于整个Symfony框架的应用程序中启用规范化器,必须将其注册为服务和欧宝娱乐app下载地址标记它与serializer.normalizer
.
- YAML
- XML
- PHP
1 2 3 4 5 6
# app / config / services.yml服务:app.yaml_encoder:类:AppBundle \序列化器\ TopicNormalizer标签:-{名称:serializer.normalizer}
12 3 4 5 6 7 8 9 10 11 12
<!--app/config/services.xml --><??> . 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=“app.yaml_encoder”类=“AppBundle \序列化器\ TopicNormalizer”><标签的名字=“serializer.normalizer”/>服务>服务>容器>
1 2 3 4 5 6 7
/ / app / config / services.php使用AppBundle\序列化器\TopicNormalizer;$容器->注册(“app.yaml_encoder”, TopicNormalizer::类)->addTag (“serializer.normalizer”);
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。