Как я могу изменить api-platform {id} на другое имя? - PullRequest
0 голосов
/ 01 декабря 2018

Я использую api-платформу с Symfony 4. Он работает нормально, но я хотел бы изменить URL-адрес GET с: /booking/{id} на /booking/{bookingId}

Я использую свой собственный объект DTO ипользовательский поставщик данных (не Doctrine ORM).

Вот текущие определения @ApiResource и @ApiProperty, которые отлично работают:

/**
 *
 * @ApiResource(
 *      itemOperations={
 *          "get"={
 *              "path"="/booking/{id}",
 *          },
 *          "api_bookings_get_item"={
 *              "swagger_context"={
 *                  "operationId"="getBookingItem",
 *                  "summary"="Retrieves details on a booking",
 *                  "parameters"= {
 *                      {
 *                          "name"="id",
 *                          "description"="Booking ID",
 *                          "default"="15000",
 *                          "in"="path",
 *                          "required"=true,
 *                          "type"="string"
 *                      }
 *                  },
 *                  "responses"={
 *                      "200"={
 *                          "description"="Results retrieved"
 *                      },
 *                      "404"={
 *                          "description"="Booking not found"
 *                      }
 *                  }
 *              }
 *          }
 *      },
 *      collectionOperations={}
 * )
 */
final class Booking
{
    /**
     * @var string
     * @Assert\NotBlank
     *
     * @ApiProperty(
     *    identifier=true,
     *    attributes={
     *        "swagger_context"={
     *            "description"="Booking ID",
     *            "required"=true,
     *            "type"="string",
     *            "example"="123456"
     *        }
     *     }
     * }
     */
     public $id;

     // other variables

 }

Однако, если я изменю все ссылки с 'id' до 'bookingId' перестает работать, и я получаю ошибку 404.Вот изменения, которые я внес в приведенный выше код:

"path"="/booking/{bookingId}"

"name"="bookingId"

public $bookingId;

Жестко ли закодирована API-платформа для использования 'id' в качестве идентификатора?Есть ли способ изменить это?

1 Ответ

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

В Api-платформе параметр id жестко закодирован:

namespace ApiPlatform\Core\DataProvider;
private function extractIdentifiers(array $parameters, array $attributes)
    {
        if (isset($attributes['item_operation_name'])) {
            if (!isset($parameters['id'])) {
                throw new InvalidIdentifierException('Parameter "id" not found');
            }

, но вы можете создать свою собственную операцию и использовать желаемое имя параметра. Прекрасный пример в документации пользовательских операциях

...