1

使用内部封装 swagger-ui 的 Restler 3.0.0-RC6,我定义了一个 API 方法,如下所示:

<?php

namespace v1:

class PostgreSQL {
    public function fetchArray($sql, $args = null) {

然后我通过 Restler 包含的所有类都addAPIClass扩展了那个 PostgreSQL 类。这意味着当 swagger 运行时,每个 API 都会显示一个 fetchArray 函数。我希望该方法不会出现在 swagger 文档中,因为它实际上并不是 API 的一部分。网站上的其他“事物”也使用该类,因此我无法将修饰符从 public 更改。

从 swagger-ui 的网页中隐藏该方法的正确语法是什么?

4

2 回答 2

1

有两种方法可以实现这一点,

一种是使用注释将该fetchArray方法标记为私有。@access privatefetchArray将从所有 api url 中删除,同时保持 fetchArray 仍然可供 PHP 访问

您的问题是您不想将 PostgreSQL 修改为由 composer 维护的框架的一部分。不要直接从基类扩展它,而是使用一个添加注释的中间类,然后扩展该类,如下所示

class Base {
    public function fetchArray(){
        return array();
    }
}

class Intermediary extends Base {
    /**
     * @access private
     */
    public function fetchArray(){
        return array();
    }
}

class MyApi extends Intermediary { //instead of extends Base
    //other api methods here
    //see in the explorer to note that fetchArray is no longer listed
}

另一种方法是在 Explorer 上排除它

use Luracast\Restler\Explorer;
Explorer::$excludedPaths = array('myapi/fetcharray','another/fetcharray');
于 2014-09-23T06:49:38.523 回答
0

您不应该从数据层类扩展您的 API 层类。只需使用数据层类。

class DataLayer
{
  public function fetchArray()
  {
    return array();
  }
}

class ApiLayer
{
  private $dl;

  function __construct()
  {
    $this->dl = new DataLayer();
  }

  public function getAll()
  {
    return $this->dl->fetchArray();
  }
}
于 2014-10-31T00:47:21.213 回答