2015-10-06 89 views
1

我正在使用JMS序列化程序包來將Symfony實體序列化爲json。 一切工作正常,直到我開始使用MaxDepth註釋來避免深度遞歸。Symfony 2.7 + JMS串行器+ MaxDepth

我有一個名爲「類別」的實體,它具有「子類別」,如果我在序列化時沒有使用MaxDepth註釋,它完美地工作並生成一個json對象,它應該與整個樹子類別:

{ 
    "id": 1, 
    "name": "Category 1", 
    "subcategories": [{ 
     "id": 3, 
     "name": "Category 1-1", 
     "subcategories": [{ 
      "id": 7, 
      "name": "Category 1-1-1", 
      "subcategories": [] 
     }] 
    }, { 
     "id": 4, 
     "name": "Category 1-2", 
     "subcategories": [] 
    }] 
} 

我想有隻連載子類別的第一個層次,所以我試圖配置我的實體是這樣的:

class Category 
{ 
    .... 

    /** 
    * @ORM\OneToMany(targetEntity="Category", mappedBy="parentCategory") 
    * @MaxDepth(1) 
    */ 
    private $subcategories;  

    ....  

} 

但由於某些原因,我不知道何時我啓用maxdepth檢查,使用以下代碼:

$serializedObj = $jms->serialize($obj, 'json', SerializationContext::create()->enableMaxDepthChecks()); 

我得到這個怪異的結果(無子類別編碼,但它知道有兩個):

{ 
    "id": 1, 
    "name": "Categoria 1", 
    "subcategories": [{}, {}] 
} 

上發生了什麼事你知道嗎?

謝謝!

+0

你試過設置@MaxDepth(2)嗎? –

+0

我一直在遇到同樣的問題。我瘋了,因爲'MaxDepth'註解不起作用(是的,我有'serializerEnableMaxDepthChecks = true')。 –

+0

Lexxx有權利。在子實體中,您必須設置Groups,就像您在setGroups()參數中傳遞一樣(在controller方法中) –

回答

0

時,我曾經有過一個類似的問題,它是由不使用相同的串行組中的子實體造成的,所以它給了一個空對象(沒有屬性序列化)

2

我有一個類似的問題和固定的這種方式:

在Student類:

/** 
* @ORM\ManyToOne(targetEntity="school", inversedBy="student") 
* @ORM\JoinColumn(name="school_id", referencedColumnName="id") 
* @JMS\MaxDepth(2) 
*/ 
protected $school; 

在學生控制器:

/** 
* @View(serializerEnableMaxDepthChecks=true) 
*/ 
public function getStudentsAction() { 
    $students = $this->getDoctrine() 
    ->getRepository('AppBundle:Student') 
    ->findAll(); 
    return $students; 
} 

沒有任何school被序列化,這正是我需要的!