Это фильтры сериализатора.
, если у вас есть сущность типа
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiFilter;
use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Serializer\Filter\GroupFilter;
use ApiPlatform\Core\Serializer\Filter\PropertyFilter;
use Symfony\Component\Serializer\Annotation\Groups;
/**
* @ApiResource
* @ApiFilter(PropertyFilter::class)
* @ApiFilter(GroupFilter::class)
*/
class User {
/**
* @Groups({"list"})
*/
public $email;
public $firstname;
public $lastname;
/**
* @Groups({"list"})
*/
public $age;
}
При отправке запроса GET
на /users
, например, коллекция в JSON-LD должнавыглядит как
{
...
"hydra:members": [
{
"@id": ...,
"@type": ...,
"email": "john-email@dre.ss",
"firstname": "John",
"lastname": "Doe",
"age": 30
},
{
"@id": ...,
"@type": ...,
"email": "jane-email@dre.ss",
"firstname": "Jane",
"lastname": "Doe",
"age": 20
}
]
...
}
При использовании фильтра свойств при отправке запроса GET
на /users?properties[]=email&properties[]=firstname
коллекция будет выглядеть как
{
...
"hydra:members": [
{
"@id": ...,
"@type": ...,
"email": "john-email@dre.ss",
"firstname": "John"
},
{
"@id": ...,
"@type": ...,
"email": "jane-email@dre.ss",
"firstname": "Jane"
}
]
...
}
При использовании группового фильтра отправкаGET
запрос к /users?groups[]=list
, коллекция будет выглядеть так:
{
...
"hydra:members": [
{
"@id": ...,
"@type": ...,
"email": "john-email@dre.ss",
"age": 30
},
{
"@id": ...,
"@type": ...,
"email": "jane-email@dre.ss",
"age": 20
}
]
...
}
Надеюсь, это поможет понять.
Запись аннотации фильтра на уровне класса эквивалентназаписать его на каждое свойство целевого типа, верно?
Это верно для фильтра ORM, а не для фильтра сериализатора
Наконец, использование @ApiFilter(GroupFilter::class, arguments={"parameterName"="foobargroups"})
позволяет изменитьсвойство параметра запроса, если, например, у вас есть «реальное» свойство с именем groups
.Тогда вместо отправки GET
запроса на /users?groups[]=list
вы отправите /users?foobargroups[]=list