2015-04-21 10 views
5

Я создаю проект symfony2 и с помощью пакета JMS serializer для сериализации моего объекта для хранения базы данных (я знаю, что это не лучший способ).JMS serializers error, когда свойство не существует

Но теперь моя проблема: , когда я изменяю свойство моего объекта и десериализую строку Json, сериализатор JMS игнорирует несуществующие свойства, а не бросает ошибку, что на самом деле здорово. Но я хотел бы зарегистрировать такое событие.

Ниже приведен пример, чтобы проиллюстрировать мой вопрос

JSon строку из моей базы данных:

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

TestClass: метод

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

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

Deserialize:

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

Это рес ULTS в:

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

Но когда я изменить TestClass и переименовать (или удалить) право собственности, скажем, «title2», The десериализатор игнорирует «название» атрибут в строку JSON. и что приводит к:

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

Ну нет проблем нет. Данные в базе данных неверны. Но я хотел бы зарегистрировать эту проблему. Как мне это сделать? Я не хочу, если это возможно, использовать код сериализатора JMS (так как я больше не могу его обновлять). И поиск пустых свойств в моем TestClass также не самый лучший способ, так как они могут быть нулевыми.

ответ

0

JMS Serializer позволяет настраивать обработчики и прослушиватели событий, в вашем случае я думаю, что прослушиватель событий будет достаточным, так как вы просто будете ждать появления определенной ситуации (непревзойденный атрибут). В этот момент вы просто хотите, чтобы написать это в журнал, так что курс будет следующее:

  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