Symfony2 の JMS シリアライザーを使用して、 2 つのクラスを取得しました。
これはクラス Person です:
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 のみが公開されています。
それにもかかわらず、$groups
FOSUser オブジェクト内のすべてのフィールド (例: ) を公開しており、ExclusionPolicy と矛盾しています。
注: FOSUser の ADDED フィールド (例: BaseUser には存在しない "$fullname")は、注釈 @Serializer\Exclude および/または @Serializer\ExclusionPolicy("all") によって非表示になります
注 2 : @Serializer\Exclude タグを FOSUser (例: $groups) の OVERRIDING フィールドに追加すると、非表示になりません。