Symfony2 JMSSerializerBundle在YML中公开属性

Hak*_*kim 2 configuration-files symfony jmsserializerbundle

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

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

这是我的User类:

  <?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;
}
Run Code Online (Sandbox Code Playgroud)

这是我的app/config.yml文件

jms_serializer:
    metadata:
        debug: true
        auto_detection: true
Run Code Online (Sandbox Code Playgroud)

和yml mappgin文件在src/AppBundle/Resources/config/serializer/Entity.User.yml:

AppBundle\Entity\User:
    exclusion_policy: ALL
    exclude: true
    properties:
        email:
            exclude: true
            expose: true
Run Code Online (Sandbox Code Playgroud)

该文件未被读取(或至少未被考虑),因为我的API返回了我的实体的所有字段.

我忘记了什么吗?

Art*_*iel 8

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

在你的config.yml中,jms_serializer应该看起来像这样:

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            FOSUserBundle:
                namespace_prefix: "FOS\\UserBundle"
                path: "@AppBundle/Resources/config/serializer"
Run Code Online (Sandbox Code Playgroud)

在目录中serializer你应该有一个名为Model.User.yml配置的文件,如下所示:

FOS\UserBundle\Model\User:
    exclusion_policy: ALL
    # add your desired configuration below.
Run Code Online (Sandbox Code Playgroud)