Сериализатор JMS: игнорируется политика исключения связанного объекта

Используя сериализатор JMS от Symfony2, я получил 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.

Тем не менее, он предоставляет каждое поле (например, $groups) в объекте FOSUser, что противоречит его ExclusionPolicy.

ПРИМЕЧАНИЕ. Любое ДОБАВЛЕННОЕ поле в FOSUser (например, «$ fullname», которого нет в BaseUser) действительно скрывается аннотациями @Serializer \ Exclude и / или @ Сериализатор \ ExclusionPolicy ("все")

ПРИМЕЧАНИЕ2: если я добавлю тег @Serializer \ Exclude в поле ПЕРЕПРЕСТ В FOSUser (например, $ groups), он не скроет его.


person xDaizu    schedule 23.05.2016    source источник


Ответы (1)


config.yml

jms_serializer:
   metadata:    
    directories:
        FOSUserBundle:
            namespace_prefix: "FOS\\UserBundle"
            path: "@AcmeBundle/Resources/config/serializer"

затем в /src/AcmeBundle/Resources/config/serializer/Model.User.yml

FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    properties:
       id:
          expose: true
person Zandor    schedule 04.06.2016