2015-04-21 26 views
5

Bir symfony2 projesi oluşturuyorum ve nesne depolama için nesneyi serileştirmek üzere JMS serializer demetini kullanıyorum (bunun en iyi yol olmadığını biliyorum).Özellik mevcut değilken JMS serializörler hatası

Ancak, benim neslimin bir özelliğini değiştirdiğimde ve Json dizgesini yeniden seri hale getirdiğimde artık benim sorunum, , aslında büyük olan bir hata yerine JMS serializer var olmayan özellikleri yok sayar. Yine de böyle bir olayı günlüğe kaydetmek istiyorum.

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

TestClass:

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

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

Deserialize yöntemi:

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

Bu res Aşağıda

benim soruyu benim veritabanından

Json dize göstermek için bir örnek

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

Ben, diyelim "title2" başlığı benim TestClass değiştirip yeniden adlandırmak (veya kaldırmak) Fakat deserializer Json dizede "title" özelliğini yok sayar: in ka bul etmez. hiçbir sorun yok Eh

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

: içinde ve bu sonuçlar. Veritabanındaki veriler yanlış. Ama bu problemi günlüğe kaydetmek istiyorum. Bunu nasıl yapmalıyım? Mümkünse JMS serileştiricisinin kodunu karıştırmak istemiyorum (artık onu güncelleyemediğimden). TestClass'ımdaki boş özellikleri aramak da en iyi yol değil, çünkü boş olabilirler.

cevap

0

JMS Serializer, işleyicileri ve olay dinleyicileriyle yapılandırılmaya izin verir; bu durumda, bir olay dinleyicisinin, yalnızca belirli bir durumun ortaya çıkmasını bekleyeceğiniz için yeterli olduğunu düşünürüm (benzersiz bir özellik). Bu noktada sadece o oturum açmak için yazmak istiyorum, bu yüzden tabii ki şu olacaktır:

  1. dinleyici bir günlük satırı yazmak olun
  2. JMS \ Serializer \ EventDispatcher \ EventSubscriberInterface uygulayan bir dinleyici sınıf oluşturun Durumunuz karşılandığında.
  3. Bu dinleyiciyi bir etkinliğe abone yapın.

Bu akşam işten eve döndüğümde daha ayrıntılı bir açıklama yazacağım ama belki de bu zaten size yardımcı olabileceğini düşündüm. Daha fazla ayrıntı için docs dışarı

Kontrol: http://jmsyst.com/bundles/JMSSerializerBundle/master/configuration#event-dispatcher Ve varsayılan aboneler size bir ipucu verebilir: https://github.com/schmittjoh/serializer/tree/master/src/JMS/Serializer/EventDispatcher/Subscriber