2016-05-23 69 views
1

使用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(如$組),它隱藏它。

回答

2

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