2015-05-29 68 views
2

我只想使用JMSSerializerBundle和FOSRestBundle公开我的User类的几个属性。 好像串行器捆绑软件没有读取我的配置文件。Symfony2 JMSSerializerBundle公开YML中的属性

我的用户级别在src/AppBundle/Entity/User,它扩展了FOSUserBundle用户类。

这里是我的用户等级:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use FOS\UserBundle\Model\User as BaseUser; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* User 
* 
* @ORM\Table(name="backoffice_user") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\UserRepository") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="lastname", type="string", length=70) 
    */ 
    private $lastname; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="firstname", type="string", length=70) 
    */ 
    private $firstname; 
} 

这是我的应用程序/文件config.yml

jms_serializer: 
    metadata: 
     debug: true 
     auto_detection: true 

而且在src/AppBundle/Resources/config/serializer/Entity.User.yml的YML mappgin文件:

AppBundle\Entity\User: 
    exclusion_policy: ALL 
    exclude: true 
    properties: 
     email: 
      exclude: true 
      expose: true 

文件(或至少没有考虑到),因为我的API将我的实体的所有字段返回给我。

我忘了什么吗?

回答

7

您的映射文件未加载,因为序列化程序将规则应用于定义属性的类。在你的情况 - 这是FOS\UserBundle\Model\User。你需要的是覆盖Third-Party Metadata - 一个简短的样本中可以看到包的documentation

在你config.yml,jms_serializer大概应该是这样的:

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

目录里面serializer你应该有一个文件命名为Model.User.yml与配置是这样的:

FOS\UserBundle\Model\User: 
    exclusion_policy: ALL 
    # add your desired configuration below. 
+0

非常感谢你,就是这样:)我需要配置它的子属性,如“姓氏”,我想我必须在Entity.User.yml文件中这样做 – Hakim

+0

当你做出请记住清除Symfony缓存,app/cache文件夹。 – Nicodemuz

0

JMSSerializer你需要有一个文件每一个类的教主的年。

因此,排除策略仅适用于属性id,lastnamefirstname;对于BaseUser它使用默认规则,即包含所有内容。

要覆盖从另一个包的配置文件,您首先需要设置的命名空间中的文件夹中的配置有:

jms_serializer: 
    metadata: 
     directories: 
      FOSUB: 
       namespace_prefix: "FOS\\UserBundle" 
       path: "%kernel.root_dir%/serializer/FOSUB" 

而且在app/serializer/FOSUB/Model.User.yml添加串行配置文件。有关其他配置选项,请参阅official docs

+0

是的谢谢你:) – Hakim