Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php JMS序列化程序是否忽略具有访问者注释的排除策略?_Php_Symfony_Jmsserializerbundle_Jms Serializer - Fatal编程技术网

Php JMS序列化程序是否忽略具有访问者注释的排除策略?

Php JMS序列化程序是否忽略具有访问者注释的排除策略?,php,symfony,jmsserializerbundle,jms-serializer,Php,Symfony,Jmsserializerbundle,Jms Serializer,所以我有一个类似这样的响应类(简化的代码片段): 排除策略将所有字段排除在序列化之外,除非它们通过@Serializer\Expose显式公开并且数据组匹配 除了带有@Serializer\Accessor注释的字段外,这对所有字段都非常有效。无论组策略如何,始终包含这些字段。我在文档或任何其他报告中都找不到任何建议@Serializer\Accessor注释覆盖组策略的内容,也找不到在Accessor函数中手动检查数据组的方法 有没有办法做到这一点,或者我必须将所有访问器函数内联到响应构造函数

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

排除策略将所有字段排除在序列化之外,除非它们通过
@Serializer\Expose
显式公开并且数据组匹配

除了带有
@Serializer\Accessor
注释的字段外,这对所有字段都非常有效。无论组策略如何,始终包含这些字段。我在文档或任何其他报告中都找不到任何建议
@Serializer\Accessor
注释覆盖组策略的内容,也找不到在Accessor函数中手动检查数据组的方法


有没有办法做到这一点,或者我必须将所有访问器函数内联到响应构造函数中?我试图避免使用一个巨大的100L+构造函数,但如果我不能排除某些字段,它就无法使用访问器注释…

我从未使用过
访问器
注释,因此我不知道它不起作用的原因,但我可以建议您直接在函数上添加注释,将它们标记为虚拟属性:

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

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

您是否尝试过使用
$serializer->serialize(new MyResponse(),'json',\JMS\serializer\SerializationContext::create()->setGroups(数组('Default'))
/**
 * @Serializer\ExclusionPolicy("all")
 */
class MyResponse
{
    public $name;

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