Добавить пользовательскую операцию в другую группу в документации ApiPlatform - PullRequest
1 голос
/ 12 января 2020

У меня есть пользовательская операция CreatePerson, отправляемая через messenger.

/**
 * @ApiResource(
 *     messenger=true,
 *     output=false,
 *     shortName="person",
 *     collectionOperations={
 *         "post"
 *     },
 *     itemOperations={}
 * )
 *
 * @psalm-immutable
 */
final class CreatePerson

Это работает, как и ожидалось, с POST /api/people (люди вместо человека, потому что ApiPlatform использует Inflection для множественного числа shortname on collectionOperations.

Документы API выглядят так:

enter image description here

Я хотел бы добавить список человек тоже. Поэтому я создал другой Api-ресурс:

/**
 * @ApiResource(
 *     collectionOperations={
 *         "get"
 *     },
 *     itemOperations={}
 * )
 *
 * @psalm-immutable
 */
final class Person

shortname моего customOperation ist person. Это также группа в документации, которую я хочу, чтобы list операция в.

Все работает как положено. Person и CreatePerson - это два ApiResource с. Но теперь мои документы выглядят так:

enter image description here

Я хочу сгруппировать их вместе в API-документах (потому что они принадлежат друг другу).

Причина, по которой я использую дополнительный CreatePerson -DTO Я использую Api-Platform полностью без doctrine. DTO отправляется через мессенджер и создает Person с помощью Event-Sourcing. Person -класс является проекцией только для чтения.

1 Ответ

0 голосов
/ 12 января 2020

Решением для меня было использование openapi_context.

/**
 * @ApiResource(
 *     messenger=true,
 *     output=false,
 *     collectionOperations={
 *          "post"={
 *              "method"="POST",
 *              "path"="/people",
 *              "openapi_context"={
 *                  "tags"={
 *                      "Person"
 *                  },
 *             },
 *         },
 *     },
 *     itemOperations={},
 * )
 *
 * @psalm-immutable
 */
final class CreatePerson

И Person:

/**
 * @ApiResource(
 *     collectionOperations={
 *          "get"
 *     },
 *     itemOperations={},
 * )
 * @ORM\Entity(repositoryClass="App\Repository\PersonRepository")
 *
 * @psalm-immutable
 */
final class Person

(видно здесь: https://github.com/api-platform/docs/issues/143)

Со следующим результатом в документах:

enter image description here

...