Symfony2 JMSSerializerBundle暴露YML中的属性

Symfony2 JMSSerializerBundle暴露YML中的属性,symfony,configuration-files,jmsserializerbundle,Symfony,Configuration Files,Jmsserializerbundle,我只想使用JMSSerializerBundle和FOSRestBundle公开我的用户类的一些属性。 似乎序列化程序包没有读取我的配置文件 我的用户类位于src/AppBundle/Entity/User中,它扩展了FOSUserBundle用户类 这是我的用户类: <?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Model\User as BaseUser

我只想使用JMSSerializerBundle和FOSRestBundle公开我的用户类的一些属性。 似乎序列化程序包没有读取我的配置文件

我的用户类位于
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;
}
以及
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将返回实体的所有字段


我忘了什么吗?

没有加载映射文件,因为序列化程序将规则应用于定义属性的类。在您的情况下-即
FOS\UserBundle\Model\User
。您需要的是覆盖
第三方元数据
——在bundle的

在config.yml中,
jms\u序列化程序
可能如下所示:

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            FOSUserBundle:
                namespace_prefix: "FOS\\UserBundle"
                path: "@AppBundle/Resources/config/serializer"
FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    # add your desired configuration below.
在目录
serializer
中,您应该有一个名为
Model.User.yml
的文件,其配置如下:

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            FOSUserBundle:
                namespace_prefix: "FOS\\UserBundle"
                path: "@AppBundle/Resources/config/serializer"
FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    # add your desired configuration below.

JMSSerializer
中,层次结构的每个类都需要一个文件

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

要覆盖另一个捆绑包中的配置文件,首先需要使用以下命令在配置中为命名空间设置文件夹:

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

并在app/serializer/FOSUB/Model.User.yml中添加序列化程序配置文件。请参阅“其他配置”选项。

非常感谢,就是这样:)我需要为子属性(如“lastname”)配置它,我想这次我必须在Entity.User.yml文件中进行配置。在进行更改后,请记住清除Symfony缓存、app/cache文件夹。