2015-04-21 15 views
5

Tworzę projekt symfony2 i za pomocą pakietu serializatora JMS do serializacji mojego obiektu do przechowywania bazy danych (wiem, że to nie jest najlepszy sposób).Błąd serializatora JMS, gdy właściwość nie istnieje

Ale teraz mój problem polega na tym, że , kiedy zmieniam właściwość mojego obiektu i deserializuję ciąg Json, serializator JMS ignoruje nieistniejące właściwości zamiast rzucać błąd, który jest naprawdę świetny. Chciałbym jednak zarejestrować takie wydarzenie.

Poniżej jest przykład do zilustrowania moje pytanie

JSON ciąg z mojej bazy danych:

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

TestClass: metoda

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

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

Cofnięcie:

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

res ta ÜLTS w:

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

Ale kiedy mogę zmienić TestClass i zmienić (lub usunąć) tytuł do, powiedzmy, "TITLE2" The Deserializator ignoruje atrybut "title" w ciąg JSON. i to powoduje:

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

Cóż, nie ma problemu. Dane w bazie danych są błędne. Ale chciałbym zarejestrować ten problem. Jak mam to zrobić? Nie chcę wprowadzać w błąd kodu serializatora JMS, jeśli to możliwe (ponieważ nie mogę go już zaktualizować). A szukanie pustych właściwości w mojej klasie TestClass nie jest najlepszym rozwiązaniem, ponieważ mogą one mieć wartość zerową.

Odpowiedz

0

Serializer JMS pozwala na skonfigurowanie za pomocą procedur obsługi i detektorów zdarzeń, w twoim przypadku uważam, że detektor zdarzeń byłby wystarczający, ponieważ czeka się tylko na wystąpienie określonej sytuacji (atrybut niedopasowany). W tym momencie po prostu chcesz pisać to do dziennika, więc oczywiście byłby następujący:

  1. Utwórz klasę słuchacza, który implementuje JMS \ serializer \ EventDispatcher \ EventSubscriberInterface
  2. Bądź słuchacz napisać wiersz dziennika kiedy twój warunek zostanie spełniony.
  3. Zasubskrybuj tego słuchacza wydarzenia.

Napiszę bardziej szczegółowy opis, kiedy wrócę do domu z pracy tego wieczoru, ale pomyślałem, że to może ci pomóc już teraz.

Sprawdź docs więcej szczegółów: http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher a domyślne abonenci mogą dać wskazówkę: https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber

Powiązane problemy