Как быстро устранить ошибку плюрализации в API Platform? - PullRequest
0 голосов
/ 30 декабря 2018

Встроенное множественное множественное использование Symfony иногда дает сбой, и основанная на нем API-платформа неправильно строит пути к ресурсам (по крайней мере, не так, как хотелось бы, чтобы они создавались).

Например: есть словарь английского языкаAPI, содержащий записи, и каждый ресурс записи может иметь подресурс PartOfSpeech.Фактически несколько частей речи.

/**
 * @ApiResource
 * @ORM\Entity
 */
class Entry {

    // ...

    /**
     * @var PartOfSpeech[]
     *
     * @ORM\OneToMany(targetEntity="PartOfSpeech", mappedBy="entry")
     * @ApiSubresource
     */
     public $partsOfSpeech;
}

/**
 * @ApiResource
 * @ORM\Entity
 */
 class PartOfSpeech {

     // ...

     /**
      * @var Entry
      *
      * @ORM\ManyToOne(targetEntity="Entry", inversedBy="partsOfSpeech")
      */
      public $entry;
 }

Итак, хотя я бы хотел, чтобы путь был parts_of_speech, API Platform будет генерировать part_of_speeches или даже parts_of_speeches (в случае подресурса)по очевидной причине.Я знаю, что могу заменить операцию пути на операцию: collectionOperations={"get"={"path"="/parts_of_speech/{id}"}}.Но я считаю это немного некрасивым и неудобным.Можно ли навязать другой путь более элегантным способом?Желательно в одном месте на ресурс.А как изменить путь подресурса?

-

Уточнение:

Я почти могу решить это как:

/**
 * @ApiResource(
 *     collectionOperations={
 *         "get"={"path"="/parts_of_speech"},
 *         "post"={"path"="/parts_of_speech"},
 *     },
 *     itemOperations={
 *         "get"={"path"="/parts_of_speech/{id}"},
 *         "delete"={"path"="/parts_of_speech/{id}"},
 *         "put"={"path"="/parts_of_speech/{id}"},
 *         "patch"={"path"="/parts_of_speech/{id}"},
 *     },
 * )
 * @ORM\Entity
 */
class PartOfSpeech
{

Это почтивыполняет работу, но: 1. Это уродливо, поэтому я спрашиваю, есть ли более короткое, более элегантное решение;2. Даже если я напишу так, я все еще не знаю, как исправить множественное число в случае подресурса.Следующее (предположение, основанное на документации) не работает:

/**
 * @ApiResource(
 *     subresourceOperations={
 *         "part_of_speech_get_subresource"={"path"="/entries/{id}/parts_of_speech"},
 *     }
 * )
 * @ORM\Entity
 */
class Entry
{

и по-прежнему отображает: /entries/{id}/parts_of_speeches

1 Ответ

0 голосов
/ 31 декабря 2018

Для этого вы можете использовать атрибут routePrefix:

/**
 * @ApiResource(routePrefix="/parts_of_speech")
 */
class Entity
{
}
...