使用Symfony2's JMS Serializer我有2個類。JMS序列化程序:忽略關聯實體的排除策略
這是類人:
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;
}
而且FOSUser:
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。儘管如此,它暴露了FOSUser對象中的每個字段(例如$groups
),這與其ExclusionPolicy相矛盾。
注意:在FOSUser任何添加字段(如「$全名」,這不存在BaseUser)確實通過註釋得到隱藏@Serializer \排除和/或@Serializer \ ExclusionPolicy(「全「)
NOTE2:如果我加入@Serializer \排除標籤,以壓倒一切的領域FOSUser(如$組),它不隱藏它。