Я новичок в чванстве, и мне нужна помощь;)
все настроено и работает ..
мои контроллеры устанавливаются автоматически с помощью цикла 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"}
]
}
Есть ли способ сделать это правильно?
Переменные в аннотациях 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;
Других решений пока нет …