JMS Serializer 不加载 Symfony 4 中的元数据配置
JMS Serializer does not load metadata config in 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 中元数据配置的样子:
App\Entity\Api\Auth\SystemUser:
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 App\Entity\Api\Auth;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class SystemUser extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
但是无论 属性 我在 SystemUser.yml 文件中排除什么,输出都不会改变。它显示所有属性。
我正在使用最新的 Symfony 4.3
您的文件 src/serializer/SystemUser.yml
的名称有误。对于 namespace_prefix: "App\Entity"
和您的 SystemUser.php
命名空间,它应该是 Api.Auth.SystemUser.yml
这是因为您的用户扩展了 BaseUser。你需要这样做:
jms_serializer.yaml
jms_serializer:
metadata:
auto_detection: true
directories:
App:
namespace_prefix: 'App\Entity'
path: '%kernel.root_dir%/serializer'
FOSUB:
namespace_prefix: 'FOS\UserBundle'
path: '%kernel.root_dir%/serializer'
src/serializer/Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
id:
exclude: false
username:
exclude: false
我已经像这样配置了 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 中元数据配置的样子:
App\Entity\Api\Auth\SystemUser:
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 App\Entity\Api\Auth;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class SystemUser extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
但是无论 属性 我在 SystemUser.yml 文件中排除什么,输出都不会改变。它显示所有属性。
我正在使用最新的 Symfony 4.3
您的文件 src/serializer/SystemUser.yml
的名称有误。对于 namespace_prefix: "App\Entity"
和您的 SystemUser.php
命名空间,它应该是 Api.Auth.SystemUser.yml
这是因为您的用户扩展了 BaseUser。你需要这样做:
jms_serializer.yaml
jms_serializer:
metadata:
auto_detection: true
directories:
App:
namespace_prefix: 'App\Entity'
path: '%kernel.root_dir%/serializer'
FOSUB:
namespace_prefix: 'FOS\UserBundle'
path: '%kernel.root_dir%/serializer'
src/serializer/Model.User.yml
FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
id:
exclude: false
username:
exclude: false