JMS Serializer 不会在 Symfony 4 中加载元数据配置



我已经像这样配置了JMS序列化程序:

jms_serializer:
visitors:
xml_serialization:
format_output: '%kernel.debug%'
metadata:
auto_detection: true
directories:
App:
namespace_prefix: "App\Entity"
path: "%kernel.root_dir%/serializer"

以下是实体 SystemUser 在 src/serializer/SystemUser.yml 中的元数据配置的样子:

AppEntityApiAuthSystemUser:
exclusion_policy: ALL
properties:
id:
expose: true
password:
expose: false
username:
expose: true
email:
expose: true
last_login:
expose: true

我特别使用了 .yml 扩展名,因为文档中提到这里必须使用 .yml 扩展名:

https://jmsyst.com/bundles/JMSSerializerBundle/2.x/configuration#defining-metadata

我在 src/Entity/Api/Auth/SystemUser 中有实体.php看起来像这样:

<?php
namespace AppEntityApiAuth;
use DoctrineORMMapping as ORM;
use FOSUserBundleModelUser as BaseUser;
/**
* @ORMEntity
* @ORMTable(name="fos_user")
*/
class SystemUser extends BaseUser
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}

但是无论我在SystemUser.yml文件中排除什么属性,输出都不会改变。它显示所有属性。

我正在使用最新的Symfony 4.3

您的文件src/serializer/SystemUser.yml名称错误。对于namespace_prefix: "AppEntity"和您的SystemUser.php命名空间,它应该是Api.Auth.SystemUser.yml

这是因为您的用户扩展了基本用户。您需要这样做:

jms_serializer.yaml

jms_serializer:
metadata:
auto_detection: true
directories:
App:
namespace_prefix: 'AppEntity'
path: '%kernel.root_dir%/serializer'
FOSUB:
namespace_prefix: 'FOSUserBundle'
path: '%kernel.root_dir%/serializer'

src/serializer/Model.User.yml

FOSUserBundleModelUser:
exclusion_policy: ALL
properties:
id:
exclude: false
username:
exclude: false

最新更新