#php #symfony #serialization #api-platform.com
Вопрос:
У меня есть объект ресурсов API, подобный этому:
/**
* @ApiResource(
* collectionOperations={},
* itemOperations={"get"},
* normalizationContext={"groups"={"read"}},
* )
*/
class A
{
/**
* @var array<B>
* @Groups("read")
*/
private array $b;
// ...
}
@Groups
Аннотация для свойств работает, я получаю только те, с @Groups("read")
которыми .
Но у меня есть вложенные объекты, подобные этому:
class B
{
/**
* @var array<C>
* @Groups("read")
*/
private array $c;
// ...
}
class C
{
/**
* @Groups("read")
*/
private string $foo;
private string $bar;
// ...
}
В B
, @Groups
аннотации по-прежнему соблюдаются, но в C
я получаю все свойства, полностью игнорируя аннотации.
Ожидаемый результат, такой как:
{
"b": [
{
"c": [
{
"foo": "This should be public"
}
]
}
]
}
Получил вывод, как:
{
"b": [
{
"c": [
{
"foo": "This should be public"
"bar": "This should be private"
}
]
}
]
}
Что мне нужно сделать, чтобы это сработало?
(если это имеет значение, то ни B
то , ни C
другое не является @ApiResource
, но C
является Доктриной @Entity
. Я использую пользовательский поставщик данных для A
)
Ответ №1:
Я обнаружил, что это… C
реализовано JsonSerializable
по другим причинам, и представление JSON из jsonSerialize()
содержащихся foo
и bar
.
Платформа API, по-видимому, использует это, если она существует. Кое-чему научился!