2016-04-02 33 views
2

Symfony varlıklarımı JSON'a serileştirmek için JMSSerializerBundle kullanıyorum. Aşağıdaki sınıf yapısı vardır: JMSSerializerBundle: @Group Ebeveyn üst sınıfı alanlarında çalışmaz

abstract class A {} 
abstract class B extends A {} 
class C extends B {} 

Şimdi sınıfın C bir nesne seri hale getirmek istiyoruz, bu yüzden yeni bir Grup tanımlamak, diyelim "example_group" let ve bunun gibi @Groups ek açıklama ayarlayın:

abstract class A { 
    /** 
    * @Groups({"example_group"}) 
    */ 
    private $a1; 

    private $a2; 
} 

abstract class B extends A { 
    /** 
    * @Groups({"example_group"}) 
    */ 
    private $b1; 

    private $b2; 
} 

class C extends B { 
    /** 
    * @Groups({"example_group"}) 
    */ 
    private $c1; 
} 

Ortaya çıkan serileştirme, yalnızca C::c1 alanını değil, aynı zamanda B::b1'u da içerir, ancak şaşırtıcı bir şekilde A::a1'dur. Beklenen davranış bu mu? Dahil olmak için A::a1'a da ihtiyacım var. Bunu nasıl başarabilirim?

Teşekkür ederiz.

cevap

0

Üç sınıf için ExclusionPolicy'u ayarlamayı unutmayın.

use JMS\Serializer\Annotation\ExclusionPolicy 

/** 
* @ExclusionPolicy("all") 
*/ 
abstract class A 
{ 
    // ... 
} 

/** 
* @ExclusionPolicy("all") 
*/ 
abstract class B extends A 
{ 
    // ... 
} 

/** 
* @ExclusionPolicy("all") 
*/ 
class C extends B 
{ 
    // ... 
} 

grubun example_group ile C seri ederek, @Groups açıklama yoluyla maruz kalan tüm özelliklerini almak gerekir.

Örneğiniz için $a1, $b1 ve $c1 işlenmiş olmalıdır.

+0

Tüm sınıflar için \ @ExclusionPolicy ("all") bildirirsem, serileştirilmek istediğim tüm öznitelikler için açıkça belirtmedikçe özniteliklerin hiçbiri oluşturulmaz. Her neyse, bunu yapmayı denedim, ancak yine de $ a niteliğini göremiyorum (daha önce olduğu gibi aynı sonuç, $ b ve $ c doğru şekilde işleniyor). Eğer yanılmıyorsam, \ @Grups kullandığınızda \ @ExclusionPolicy gerekli değildir. –

+0

Diziselleştiriciyi aradığınızda grubu nasıl belirlersiniz? – chalasr

+0

Grubu şöyle ayarladım: $ serializer-> serialize ($ data, 'json', SerializationContext :: create() -> setGroups (array ('example_group'))); –