Symfony2 JMSSerializerBundle 在 YML 中公开 属性
Symfony2 JMSSerializerBundle expose property in YML
我只想使用 JMSSerializerBundle 和 FOSRestBundle 公开我的用户 class 的几个属性。
序列化程序包似乎没有读取我的配置文件。
我的用户 class 在 src/AppBundle/Entity/User
中,它扩展了 FOSUserBundle 用户 class。
这是我的用户 class:
<?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;
}
这是我的 app/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 returns 我的实体的所有字段。
我是不是忘记了什么?
您的映射文件未加载,因为序列化程序将规则应用于定义属性的 class。在您的情况下 - 即 FOS\UserBundle\Model\User
。你需要的是覆盖 Third-Party Metadata
- 一个简短的示例可以在 bundle 的 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.
在 JMSSerializer
中,每个 class 层级都需要一个文件。
因此,排除政策仅适用于属性 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
中添加序列化器配置文件。有关其他配置选项,请参阅 official docs。
我只想使用 JMSSerializerBundle 和 FOSRestBundle 公开我的用户 class 的几个属性。 序列化程序包似乎没有读取我的配置文件。
我的用户 class 在 src/AppBundle/Entity/User
中,它扩展了 FOSUserBundle 用户 class。
这是我的用户 class:
<?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;
}
这是我的 app/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 returns 我的实体的所有字段。
我是不是忘记了什么?
您的映射文件未加载,因为序列化程序将规则应用于定义属性的 class。在您的情况下 - 即 FOS\UserBundle\Model\User
。你需要的是覆盖 Third-Party Metadata
- 一个简短的示例可以在 bundle 的 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.
在 JMSSerializer
中,每个 class 层级都需要一个文件。
因此,排除政策仅适用于属性 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
中添加序列化器配置文件。有关其他配置选项,请参阅 official docs。