Symfony JMS序列化程序:如何限制对象图的序列化深度
也许这只是我对这个注释的误解,但是它并没有像预期的那样工作 我有下面的对象图Symfony JMS序列化程序:如何限制对象图的序列化深度,symfony,jmsserializerbundle,Symfony,Jmsserializerbundle,也许这只是我对这个注释的误解,但是它并没有像预期的那样工作 我有下面的对象图 User -> Company -> Users -> Groups -> Permissions 正如你所看到的,将会有一些递归。JMS不序列化其他用户的公司属性,也不序列化当前用户,从而很好地处理了这一问题 然而,我希望序列化停止在并包括公司 我尝试过这个方法,希望一旦级别$context->level=2,它就会停止 <?php namespace FinalC
User
-> Company
-> Users
-> Groups
-> Permissions
正如你所看到的,将会有一些递归。JMS不序列化其他用户的公司属性,也不序列化当前用户,从而很好地处理了这一问题
然而,我希望序列化停止在并包括公司
我尝试过这个方法,希望一旦级别$context->level=2,它就会停止
<?php
namespace FinalConcept\TimeTracker\EntitiesBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;
/**
* FinalConcept\TimeTracker\EntitiesBundle\Entity
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="FinalConcept\TimeTracker\EntitiesBundle\Repository\UserRepository")
*/
class User implements UserInterface, \Serializable
{
/**
* @ORM\ManyToOne(targetEntity="company", inversedBy="users")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id")
* @JMS\MaxDepth(depth=1)
*/
private $company;
}
提前感谢您提供的有关如何限制对象图序列化深度的帮助,因为我无法访问最新版本的序列化程序,所以我必须找到@MaxDepth的解决方法。这也可能对你有所帮助
User
-> Company
-> Users
-> Groups
-> Permissions
在连接的所有实体上使用@JMS\ExclutionPolicy(“全部”)
现在,仅在您希望序列化的属性上使用@JMS\Expose。
在连接关系上,仅在一个方向上使用此注释。那会解决你的问题
namespace FinalConcept\TimeTracker\EntitiesBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation as JMS;
/**
* FinalConcept\TimeTracker\EntitiesBundle\Entity
*
* @JMS\ExclusionPolicy("all")
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="FinalConcept\TimeTracker\EntitiesBundle\Repository\UserRepository")
*/
class User implements UserInterface, \Serializable
{
/**
* @JMS\Expose
* @ORM\ManyToOne(targetEntity="company", inversedBy="users")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id")
*/
private $company;
}
从最新版本开始,在控制器中使用@MaxDepth()注释和SerializationContext::create()->enableMaxDepthChecks()可以完成这项工作。嘿,谢谢你的精彩回复。是否可以在孔类??无sry上提及
@MaxDepth
@MaxDepth被标记为property/methodannontation@Target({“property”,“Method”})嘿,谢谢你的回复。是否可以在孔类中提及@MaxDepth
??