【问题标题】:Swagger, PHP variables in comments, for loopSwagger,注释中的 PHP 变量,for 循环
【发布时间】:2015-09-24 11:31:11
【问题描述】:

我是招摇的新手,需要一些帮助;) 一切都设置好了,并且可以正常工作..

我的控制器是用 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"
        }
    ]
}

有没有办法正确地做到这一点?

【问题讨论】:

  • 查看响应 ;) ... 它可以工作 - 但不要使用变量,也不要使用 for 循环 ..
  • 有没有办法通过注册 swg 注释。 PHP 代码而不是 cmets?

标签: php swagger swagger-php


【解决方案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;

【讨论】:

  • 你好@bob,非常感谢,..我现在唯一的问题是混合“评论”方式和代码方式,这不可能吗?我的招摇模型是由 cmets 制成的,并且服务像在您的代码示例中一样注册,但是当我引用模型 type="user" 时,它将是未定义的。有解决办法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 2012-02-26
相关资源
最近更新 更多