Итак, у меня есть такой класс ответа (упрощенный фрагмент):
/**
* @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+, но это лишает смысла использование аннотации доступа, если я не могу исключить определенные поля...
$serializer->serialize(new MyResponse(), 'json', \JMS\Serializer\SerializationContext::create()->setGroups(array('Default')));
? - person tftd   schedule 24.07.2017