gpt4 book ai didi

php - 属性不存在时 JMS 序列化程序出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:49:59 26 4
gpt4 key购买 nike

我正在创建一个 symfony2 项目并使用 JMS 序列化程序包来序列化我的对象以进行数据库存储(我知道这不是最好的方法)。

但现在我的问题是,当我更改对象的属性并反序列化 Json 字符串时,JMS 序列化程序会忽略不存在的属性,而不是抛出错误,这实际上很棒。但是我想记录这样的事件。

下面是一个例子来说明我的问题

来 self 的数据库的 Json 字符串:

$dataToBeDeserialized = {"title":"testing123","text":"Lorem Ipsum"}

测试类:

/**
* @Type("string")
*/
protected title;

/**
* @Type("string")
*/
protected text;

反序列化方法:

$this->serializer = SerializerBuilder::create()->build();
$this->serializer->deserialize($dataToBeDeserialized, 'TestClass', 'json');

这导致:

TestClass {
title: "testing123",
text: "Lorem Ipsum"}

但是当我更改我的测试类并将标题重命名(或删除)为“title2”时,反序列化器会忽略 Json 字符串中的“title”属性。结果是:

  TestClass {
title2: "",
text: "Lorem Ipsum"}

没问题。数据库中的数据是错误的。但我想记录那个问题。我应该怎么做?如果可能的话,我不想弄乱 JMS 序列化程序的代码(因为我不能再更新它了)。在我的 TestClass 中查找空属性也不是最好的方法,因为它们可能为空。

最佳答案

JMS 序列化程序允许配置处理程序和事件监听器,在您的情况下,我认为事件监听器就足够了,因为您只需等待特定情况(不匹配的属性)的发生。那时你只是想把它写到日志中,所以过程如下:

  1. 创建一个实现 JMS\Serializer\EventDispatcher\EventSubscriberInterface 的监听器类
  2. 让监听器在满足您的条件时写入日志行。
  3. 为这个监听器订阅一个事件。

我今晚下类回家后会写一份更详细的描述,但我认为这可能已经对您有所帮助。

查看文档了解更多详情: http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher默认订阅者可能会给你一个线索: https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber

关于php - 属性不存在时 JMS 序列化程序出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com