Swagger, PHP переменные в комментариях, для цикла

Я новичок в чванстве, и мне нужна помощь;)
все настроено и работает ..

мои контроллеры устанавливаются автоматически с помощью цикла for, есть ли способ

$services = array(
"Users",
"Radios",
"Stations",
"UserAccess",
"Scratchs",
"Members",
"Pages",
);

$api = $this->app["controllers_factory"];

foreach($services as $service) {
$service = strtolower($service);

/**
* @SWG\Resource(basePath="/api/v1",resourcePath="/$service")
*/

/**
* @SWG\Api(
*   path="/$service/{id}",
*   description="Operations on $service",
*   @SWG\Operation(
*      method="GET",
*      summary="Find a $service",
*      nickname="get$service",
*      type="array", items="$ref:$service",
*      @SWG\ResponseMessage(code=404, message="$service not found"),
*      @SWG\ResponseMessage(code=200, message="$service found")
*   )
* )
*/
$api->get('/'.$service, $service.".controller:get");


}

выход чванства похож на это ..

{
"apiVersion": "v1",
"swaggerVersion": "1.2",
"apis": [
{
"path": "/$service",
"description": "Operations on $service"}
]
}

Есть ли способ сделать это правильно?

1

Решение

Переменные в аннотациях Doctrine (которые использует swagger-php) не поддерживаются.
У вас есть 2 варианта (я буду использовать аннотации swagger-php v2, но принципал также применим к v1.x):

Одна операция с «переменным» путем ( не рекомендуемые )

/**
* @SWG\Get(
*   path="/{service}/{id}",
*   @SWG\Parameter(
*       name="service",
*       in="path",
*       type="string",
*       enum={"users","radios","stations","useraccess","scratchs","members","pages"}
*   ),
*   @SWG\Parameter(name="id",in="path", type="integer"),
*   @SWG\Response(response=200, description="Found")
* )
*/

Генерация аннотаций из кода ( рекомендуемые )

require_once("vendor/autoload.php");
$swagger = \Swagger\scan('path/to/project');

$services = array(
"Users",
"Radios",
"Stations",
"UserAccess",
"Scratchs",
"Members",
"Pages",
);

$api = $app["controllers_factory"];

foreach($services as $service) {
$name = strtolower($service);
$path = '/'.$name.'/{id}';

$swagger->paths[$path] = new Swagger\Annotations\Path([
'path' => $path,
'get' =>  new Swagger\Annotations\Get([
'description' => "Find ".$service,
'responses' => [
new Swagger\Annotations\Response(['response' => 200, 'description'=> $service." found"])
]
])
]);

$api->get('/'.$service, $service.".controller:get");

}
$swagger->validate();
echo $swagger;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]