JmsSerializer 排除 SonataUser 的密码字段

Posted

技术标签:

【中文标题】JmsSerializer 排除 SonataUser 的密码字段【英文标题】:JmsSerializer exclude password field of SonataUser 【发布时间】:2015-08-25 09:40:35 【问题描述】:

我想排除我的序列化对象的几个(尤其是密码)字段。

我有一个对象与:Application\Sonata\UserBundle\Entity\User

当我序列化该对象时,它会给我这样的用户:

id: 1,
username: "bla",
salt: "fvasdfs9h834sgkcwsg808000w08ccwo",
password: "E7Qsfswef9zdwfNvS6TecQraLYlbsefetRy/DPbqXvyknccxisefesefCicl4IxnXgSOnBx29Tgtp9ceUs1hPg=="

如何删除密码和盐域?

我尝试更改位于Application/Sonata/UserBundle/Resources/config/serializer/Entity.User.xml 的配置文件,但它似乎没有使用该配置,即使我清除了缓存...

【问题讨论】:

【参考方案1】:

我的第一个猜测是你的 SonataUserBundle 扩展了 FOSUserBundle,如果你检查 Sonata 的 Model User 没有密码字段:https://github.com/sonata-project/SonataUserBundle/blob/master/Model/User.php 密码字段在 FOSUserBundle 的 Model 用户中,所以你的 xml 文件没有被使用。

您必须设置定义自定义属性的路径:

config.yml

jms_serializer:
    metadata:
        directories:
            FOSUserBundle:
                path: "@ApplicationSonataUserBundle/Resources/config/serializer/"
                namespace_prefix: "FOS\\UserBundle"

我不习惯使用 xml 文件,所以这里是停止暴露密码的 yml。

Application/Sonata/UserBundle/Resources/config/serializer/Model.user.yml

FOS\UserBundle\Model\User:
    properties:
        password:
            expose: false

相关问题/答案:https://***.com/a/12961994/3726645

【讨论】:

如果这不起作用清除缓存。这对我有帮助。

以上是关于JmsSerializer 排除 SonataUser 的密码字段的主要内容,如果未能解决你的问题,请参考以下文章

SonataMediaBundle : 允许用户上传链接

使用JMS Serializer仅将实体关系序列化为Id

在JMS Serializer上反序列化期间构造对象

使用Symfony开发模式执行并发请求时Apache崩溃

maven 依赖排除 是排除低版本的还是高版本

汇总不排除排除的包