我正在使用 JMS Serializer 包将 Symfony 实体序列化为 json。 一切工作正常,直到我开始使用 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;
....
}
但由于某种原因,我不明白何时使用以下代码启用最大深度检查:
$serializedObj = $jms->serialize($obj, 'json', SerializationContext::create()->enableMaxDepthChecks());
我得到这个奇怪的结果(没有编码子类别,但它知道有两个):
{
"id": 1,
"name": "Categoria 1",
"subcategories": [{}, {}]
}
知道发生了什么吗?
谢谢!
最佳答案
我遇到了类似的问题,并通过以下方式解决:
在学生类(class)中:
/**
* @ORM\ManyToOne(targetEntity="school", inversedBy="student")
* @ORM\JoinColumn(name="school_id", referencedColumnName="id")
* @JMS\Serializer\Annotation\MaxDepth(2)
*/
protected $school;
在学生 Controller 中:
/**
* @FOS\RestBundle\Controller\Annotations\View(serializerEnableMaxDepthChecks=true)
*/
public function getStudentsAction() {
$students = $this->getDoctrine()
->getRepository('AppBundle:Student')
->findAll();
return $students;
}
学校
的任何内容都没有被序列化,这正是我所需要的!
关于Symfony 2.7 + JMS 序列化器 + MaxDepth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32974070/