Вот User
сущность, которую я хочу GET
с Hateoas библиотека:
/**
* [...]
*
* @Hateoas\Relation(
* "self",
* href=@Hateoas\Route("api_get_user", parameters={"id"="expr(object.getId())"})
* )
* @Hateoas\Relation(
* "placeofbirth",
* href="expr(link(object.getPlaceOfBirth(), 'self'))",
* exclusion=@Hateoas\Exclusion(excludeIf="expr(object.getPlaceOfBirth() === null)")
* )
*/
class User
{
// [...]
/**
* @ORM\OneToOne(targetEntity="Place")
* @Serializer\Exclude
*/
private $placeOfBirth;
// [...]
}
Мой REST-ответ правильный. _links
часть, как ожидается, содержит URI для моего OneToOne
связь:
{
// [...]
"_links": {
"self": {
"href": "\/api\/v0.1\/users\/1"},
"placeofbirth": {
"href":"\/api\/v0.1\/places\/3"}
}
}
Тем не менее, я не знаю, как получить то же самое с OneToMany
связь. Например:
/**
* @ORM\OneToMany(targetEntity="Place", mappedBy="visitor")
* @Serializer\Exclude
*/
private $visitedPlaces;
Я хотел бы получить (что-то вроде):
{
// [...]
"_links": {
"self": {
"href": "\/api\/v0.1\/users\/1"},
"visitedPlaces": [
{ "href": "\/api\/v0.1\/place\/1" },
{ "href": "\/api\/v0.1\/place\/2" },
{ "href": "\/api\/v0.1\/place\/3" },
{ "href": "\/api\/v0.1\/place\/4" }
]
}
}
Я знаю, что могу получить visitedPlaces
как встроенные ресурсы, и это работает, но это не то, что я хочу. Я не хочу получать весь объект, только URI ресурса, так же, как я делаю это с отношением с одним ресурсом (см. Место рождения).
Возможно ли это, и если да, то как?
Задача ещё не решена.
Других решений пока нет …