2015-05-29 67 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