В настоящее время я работаю над проектом, использующим Symfony 4.3.4 и Платформа API v2.3.6 .
Я столкнулся с 1 проблемой прямо сейчас.Допустим, я отправляю запрос GET в enpoint с параметром строки запроса под названием products , потому что я отправляю 1 или более идентификаторов продукта.
Я хочу получить значение параметра products в моем контроллере в виде PHP-массива .
Так что мой запрос
GET /my/endpoint?products[]=8f391c60-5467-4bf0-917f-e2151337fa7e&products[]=ddaa94e1-af79-4abf-9dfc-a28dd8077f45
В контроллере я выполняю дамп:
dump($request->query->get("products"));
Тогда я получаю:
array:2 [
0 => "8f391c60-5467-4bf0-917f-e2151337fa7e"
1 => "ddaa94e1-af79-4abf-9dfc-a28dd8077f45"
]
Как вы можете видеть, как я прохожуидентификаторы продуктов, такие как массив в строке запроса, я могу получить параметр products как массив PHP .Мое беспокойство здесь - документирование.Использование этой конфигурации в YAML:
collectionOperations:
operation_name:
method: get
path: /my/endpoint
controller: App\Controller\MyEndpointController
swagger_context:
summary: My summary
description:
My endpoint description
responses:
parameters:
-
in: query
name: products
description: "The products IDs parameter"
schema:
type: array
items:
type: "string"
example: "019fcd9b-beea-4791-8a59-d4e2d02427d6"
На странице документации API, когда я выбираю Попробуйте Я должен заполнить все значения параметров, включенные products .Проблема в том, что параметр products отображается как текстовый ввод .
Если я удаляю ключ schema в конфигурации yaml параметра, а я помещаю type: array
иitems
непосредственно на том же уровне, что и in
, name
и description
:
parameters:
-
in: query
name: products
description: "The products IDs parameter"
type: array
items:
type: "string"
example: "019fcd9b-beea-4791-8a59-d4e2d02427d6"
Затем появляется параметр products с кнопкой Add item.Каждый раз, когда я нажимаю на эту кнопку, я могу заполнить идентификатор продукта для передачи, и это нормально.Проблема в том, что когда я нажимаю на Выполнить (все еще на странице документации API), у меня возникает ошибка, потому что платформа API не отправляет запрос с параметром products в виде истинного массива, а в виде строки, содержащей все идентификаторы продукта, разделенные ,
:
GET /my/endpoint?products=8f391c60-5467-4bf0-917f-e2151337fa7e,ddaa94e1-af79-4abf-9dfc-a28dd8077f45
и вот что я хочу:
GET /my/endpoint?products[]=8f391c60-5467-4bf0-917f-e2151337fa7e&products[]=ddaa94e1-af79-4abf-9dfc-a28dd8077f45
есть идеи о том, как добиться этого с помощью платформы API?