gpt4 book ai didi

serialization - JMSSerializerBundle。无法控制第三方元数据

转载 作者:行者123 更新时间:2023-12-03 10:32:32 27 4
gpt4 key购买 nike

我有两个实体希望使用 JMSSerializerBundle 进行序列化。 Music实体有一个带有 exclusion_policy: NONE 的映射文件.
Music实体有实体的字段User来自 FOSUserBundle . User实体有一个带有 exclusion_policy: ALL 的映射文件一些字段设置为 expose: true ,所以它们将被序列化。

问题是,User字段被完全序列化。如果我更改 User 的映射文件没有关系实体。

这是它的外观:

#My/Bundle/Resources/config/serializer/Entity.Music.yml
xxx\xxx\Entity\Music:
exclusion_policy: NONE

#My/Bundle/Resources/config/serializer/Entity.User.yml
xxx\xxx\Entity\User:
exclusion_policy: ALL
properties:
id:
expose: true
username:
expose: true
username_canonical:
exclude: true
email:
exclude: true
email_canonical:
exclude: true
enabled:
exclude: true
salt:
exclude: true
password:
exclude: true
last_login:
exclude: true
confirmation_token:
exclude: true
password_requested_at:
exclude: true
groups:
exclude: true
locked:
exclude: true
expired:
exclude: true
expires_at:
exclude: true
roles:
expose: true
credentials_expired:
exclude: true
credentials_expired_at:
exclude: true

为什么它不引用它自己的映射文件?还是我在某个地方弄错了?

到目前为止我尝试了什么

我已阅读第三方元数据文档。它只是说在我的序列化程序服务中添加一个新目录。我已经这样做了,但我必须扩展 FOS\UserBundle\Entity类,并且也无权访问我试图排除的父级 protected 字段。

最佳答案

我打赌 xxx\xxx\Entity\User:指您的 自己的命名空间和类 .

如果是,则是 办法。

规则必须应用于属性所在的类。

鉴于您在配置中公开的属性,我猜您正在使用 FOSUserBundle .

因此,您必须在 FOS\UserBundle\Model\User 上应用您的规则。 .

那么你需要添加一个JMSSerializer配置以指示给定命名空间的序列化器元数据所在的位置。

它应该看起来像:

jms_serializer:
metadata:
auto_detection: true
directories:
FOSUserBundle:
namespace_prefix: "FOS\\UserBundle"
path: "@YourUserBundle/Resources/config/serializer/fos"

fos/你应该有 Model.User.yml 的目录

像这样:
FOS\UserBundle\Model\User:
exclusion_policy: ALL
properties:
id:
expose: true
groups: [list, details]
username:
expose: true
groups: [details]
email:
expose: true
groups: [me]
roles:
expose: true
groups: [details]

细节:

通过元数据将规则应用于序列化程序时,序列化程序会查找 属性。声明 的类(class)内定义 在元数据中。

例子:
class Foo {
protected $foo;
}

class Bar extends Foo {
protected $bar;
}

您的元数据将如下所示:
Foo:
exclusion_policy: ALL
properties:
foo:
expose: true

Bar:
exclusion_policy: ALL
properties:
bar:
expose: true

下面的例子不是正确的做法
Bar:
exclusion_policy: ALL
properties:
foo:
expose: true
bar:
expose: true

如果你这样做,只有关于属性(property)的规则 bar将被应用(和暴露)。

关于serialization - JMSSerializerBundle。无法控制第三方元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12960141/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com