#php #api #symfony #api-platform.com
#php #API #symfony #api-platform.com
Вопрос:
У меня есть этот объект
/**
* @ApiResource(
* collectionOperations={
* "get"={
* "access_control"="is_granted('IS_AUTHENTICATED_FULLY')"
* },
* "post"={
* "access_control"="is_granted('IS_AUTHENTICATED_FULLY')"
* }
* },
* itemOperations={
* "get"={
* "access_control"="is_granted('ROLE_ADMIN') or object.getUser() == user"
* },
* "put"={
* "access_control"="is_granted('ROLE_ADMIN') or object.getUser() == user"
* },
* "delete"={
* "access_control"="is_granted('ROLE_ADMIN') or object.getUser() == user"
* }
* }
* )
* @ORMEntity(repositoryClass="AppRepositoryFeedRepository")
*/
class Feed implements AuthoredEntityInterface
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityUser", inversedBy="feeds")
* @ORMJoinColumn(nullable=false)
*/
private $user;
/**
* @ORMColumn(type="string", length=255)
*/
private $name;
/**
* @ORMColumn(type="string", length=2083, unique=true)
*/
private $url;
//various getters and setters
}
Связанная пользовательская сущность реализует интерфейс пользователя. Этот объект реализует интерфейс, который я использую для автоматического заполнения поля пользователя зарегистрированным пользователем.
Автоматически сгенерированная конечная точка /api/feeds POST ожидает 3 параметра: пользователь, имя и URL.
Я хочу исключить параметр user из конечной точки (потому что автоматически генерируется внутри). Я знаю, что мог бы просто не использовать его, но это вызывает проблемы при тестировании, когда я получаю это сообщение:
Предоставлено недопустимое значение (недопустимый IRI?)
Спасибо
Ответ №1:
Symfony Serializer поддерживает @Groups
аннотацию, которая позволяет скрывать или показывать поля на основе заданной группы.
В документах API Platform есть пример https://api-platform.com/docs/core/serialization/#using-serialization-groups
/**
* @ApiResource(
* normalizationContext={"groups"={"read"}},
* denormalizationContext={"groups"={"write"}}
* )
*/
class Book
{
/**
* @Groups({"read", "write"})
*/
public $name;
/**
* @Groups("write")
*/
public $author;
// ...
}