使用Symfony2 的 JMS 序列化器我得到了 2 个类。
这是类人:
use JMS\Serializer\Annotation as Serializer;
/**
* @ORM\Entity(...)
* @ORM\Table(...)
* @Serializer\ExclusionPolicy("none")
*/
class Person
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/** @ORM\Column(type="string", nullable=true) */
private $firstname;
/**
*
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\FOSUser", cascade={"persist"})
*/
private $fosuser;
}
和 FOS 用户:
use FOS\UserBundle\Model\User as BaseUser;
use JMS\Serializer\Annotation as Serializer;
/**
* Acme\UserBundle\Entity\FOSUser
*
* @ORM\Entity(repositoryClass="Acme\UserBundle\Entity\FOSUserRepository")
* @Serializer\ExclusionPolicy("all")
*/
class FOSUser extends BaseUser
{
/**
* @Serializer\Expose
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", nullable=true)
* */
protected $fullname;
/**
* @ORM\ManyToMany(targetEntity="Educa\UserBundle\Entity\RoleGroup")
* @Serializer\Exclude
*/
protected $groups;
}
然后我打电话:
$serializedResponse = $serializer->serialize(
$persons, 'json', SerializationContext::create()->enableMaxDepthChecks()
);
我期望得到的是每个人都被序列化,并且在它的 fosuser 字段中,只有 FOSUser 的 id 暴露。
然而,它暴露$groups
了 FOSUser 对象中的每个字段(例如 ),这与其 ExclusionPolicy 相矛盾。
注意:FOSUser 中的任何 ADDED 字段(例如,BaseUser 中不存在的“$fullname”)都会被注释 @Serializer\Exclude 和/或 @Serializer\ExclusionPolicy("all") 隐藏
注意2:如果我将 @Serializer\Exclude 标记添加到 FOSUser 中的 OVERRIDING 字段(例如 $groups),它不会隐藏它。