JMS Serializer忽略带有访问者注释的排除策略?

时间:2017-07-24 08:09:06

标签: php symfony jmsserializerbundle jms-serializer

所以我有一个这样的响应类(简化代码段):

/**
 * @Serializer\ExclusionPolicy("all")
 */
class MyResponse
{
    /**
     * @Serializer\Expose
     * @Serializer\Groups({"myGroup"})
     * @Serializer\Accessor("getMyName")
     */
    public $name;

    public function getMyName()
    {
        return 'Donald';
    }
}

排除政策排除了所有字段的序列化,除非它们与@Serializer\Expose明确公开且数据组匹配。

这适用于除@Serializer\Accessor注释之外的所有字段。无论组策略如何,始终包含这些字段。我无法在文档或任何其他报告中找到任何内容,以建议@Serializer\Accessor注释覆盖组策略,也无法手动检查访问者函数中的数据组。

有没有办法实现这一点,还是我必须在响应构造函数中内联所有的访问器函数?我试图避免使用巨大的100L +构造函数,但是如果我不能排除某些字段,它就会失去使用访问器注释的点......

1 个答案:

答案 0 :(得分:0)

我从未使用过Accessor注释,因此我不知道它无法正常工作的原因,但我可以建议您将注释直接放在将它们标记为虚拟属性的函数上:

/**
 * @Serializer\ExclusionPolicy("all")
 */
class MyResponse
{
    public $name;

    /**
     * @Serializer\VirtualProperty()
     * @Serializer\SerializedName("name")
     * @Serializer\Groups({"myGroup"})
     */
    public function getMyName()
    {
        return 'Donald';
    }
}