Я создаю проект symfony2 и использую комплект сериализатора JMS для сериализации моего объекта для хранения базы данных (я знаю, что это не лучший способ).
Но теперь моя проблема в том,
когда я изменяю свойство моего объекта и десериализирую строку Json, сериализатор JMS игнорирует несуществующие свойства вместо того, чтобы выдавать ошибку, что на самом деле здорово. Тем не менее, я хотел бы записать такое событие.
Ниже приведен пример для иллюстрации моего вопроса
Строка Json из моей базы данных:
$dataToBeDeserialized = {"title":"testing123","text":"Lorem Ipsum"}
TestClass:
/**
* @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"}
Но когда я изменяю свой Testclass и переименовываю (или удаляю) заголовок, скажем, в «title2», десериализатор игнорирует атрибут «title» в строке Json.
и это приводит к:
TestClass {
title2: "",
text: "Lorem Ipsum"}
Ну нет проблем там. Данные в базе данных неверны. Но я хотел бы записать эту проблему. Как мне это сделать? Я не хочу связываться с кодом сериализатора JMS, если это возможно (так как я больше не могу его обновлять). И поиск пустых свойств в моем TestClass тоже не лучший способ, так как они могут быть нулевыми.
Сериализатор JMS позволяет настраивать обработчики и прослушиватели событий, в вашем случае я думаю, что прослушивателя событий будет достаточно, поскольку вы просто будете ожидать возникновения определенной ситуации (непревзойденный атрибут).
В этот момент вы просто хотите записать это в журнал, поэтому курс будет следующим:
Я напишу более подробное описание, когда вернусь домой с работы этим вечером, но я подумал, что, может быть, это уже поможет вам.
Проверьте документы для более подробной информации:
http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher
А подписчики по умолчанию могут дать вам подсказку:
https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber
Других решений пока нет …