我想使用JMSSerializerBundle和FOSRestBundle只暴露我的User类的一些属性。 似乎序列化程序包没有读取我的配置文件。
我的用户类位于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;
}
这是我的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会返回我实体的所有字段。
我忘记了什么吗?
答案 0 :(得分:8)
未加载您的映射文件,因为序列化程序将规则应用于定义属性的类。在你的情况下 - 即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.
答案 1 :(得分:0)
在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
中添加序列化程序配置文件。有关其他配置选项,请参阅official docs。