本文介绍了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中加载元数据配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 03:56