本文介绍了JMS序列化程序不在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
这是因为您的用户扩展了BaseUser。您需要执行以下操作:
jms_Series alizer.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
这篇关于JMS序列化程序不在symfony 4中加载元数据配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!