如何创建自定义上下文的建设者
编辑该页面如何创建自定义上下文的建设者
6.1
上下文建筑商在Symfony 6.1中引入的。ob娱乐下载
的序列化器组件使用标准化者和编码器将任何数据数据结构(例如JSON)。由于序列化过程可以配置序列化上下文,由于建造的环境工程师。
每个内置标准化者/编码器有其相关的上下文建设者。然而,您可能想要创建一个自定义上下文builder为你自定义标准化者。
创建一个新的上下文建设者
假设你想约会反规范化的处理方式不同,如果他们来自一个遗留系统,将日期转换为零
如果序列化的值0000-00-00
。这样做你会首先必须创建标准化者:
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日26日27日28
/ / src /序列化器/ ZeroDateTimeDenormalizer.php名称空间应用程序\序列化器;使用ob娱乐下载\组件\序列化器\标准化者\DenormalizerAwareInterface;使用ob娱乐下载\组件\序列化器\标准化者\DenormalizerAwareTrait;使用ob娱乐下载\组件\序列化器\标准化者\DenormalizerInterface;最后类ZeroDateTimeDenormalizer实现了DenormalizerInterface,DenormalizerAwareInterface{使用DenormalizerAwareTrait;公共函数denormalize(美元数据、字符串美元类型、字符串美元格式= null,数组美元上下文= []):混合{如果(“0000-00-00”= = =美元数据){返回零;}设置(美元上下文(“zero_datetime_to_null”]);返回美元这- >denormalizer- >denormalize (美元数据,美元类型,美元格式,美元上下文);}公共函数supportsDenormalization(美元数据、字符串美元类型、字符串美元格式= null,数组美元上下文= []):bool{返回真正的= = = (美元上下文(“zero_datetime_to_null”)? ?假)& & is_a (美元类型,\ DateTimeInterface::类,真正的);}}
现在你可以把zero-ish日期零
在反规范化:
1 2
美元legacyData=”{“updatedAt”:“0000-00-00”}’;美元序列化器- >反序列化(美元legacyData,MyModel::类,json的,(“zero_datetime_to_null”= >真正的]);
现在,为了避免对这个特定的记得zero_date_to_null
上下文关键,您可以创建一个专用的环境构建器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /序列化器/ LegacyContextBuilder名称空间应用程序\序列化器;使用ob娱乐下载\组件\序列化器\上下文\ContextBuilderInterface;使用ob娱乐下载\组件\序列化器\上下文\ContextBuilderTrait;最后类LegacyContextBuilder实现了ContextBuilderInterface{使用ContextBuilderTrait;公共函数withLegacyDates(保龄球美元遗产):静态{返回美元这- >(“zero_datetime_to_null”,美元遗产);}}
最后,使用它来构建序列化上下文:
1 2 3 4 5 6 7
美元legacyData=”{“updatedAt”:“0000-00-00”}’;美元上下文= (新LegacyContextBuilder ())- >withLegacyDates (真正的)- >toArray ();美元序列化器- >反序列化(美元legacyData,MyModel::类,json的,美元上下文);
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。