从swagger-ui隐藏Restler方法

时间:2014-09-21 04:26:36

标签: php restler swagger-ui

使用Restler 3.0.0-RC6,内部打包swagger-ui,我有一个如下定义的API方法:

<?php

namespace v1:

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

然后我通过Restler&#39; addAPIClass包含的所有类都扩展了PostgreSQL类。这意味着当swagger运行时,每个API都会显示一个fetchArray函数。我希望在swagger文档中出现 not 方法,因为它并不是API的真正组成部分。其他&#39;事物&#39;虽然我在网站上也使用了这个类,所以我无法从公共场所更改修饰符。

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

2 个答案:

答案 0 :(得分:1)

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

一种方法是将fetchArray方法标记为私有@access private条评论。这将从所有api url中删除fetchArray,同时保持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
}

另一种方法是在资源管理器中用

将其排除
use Luracast\Restler\Explorer;
Explorer::$excludedPaths = array('myapi/fetcharray','another/fetcharray');

答案 1 :(得分: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();
  }
}