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 関数を表示します。そのメソッドは実際には API の一部ではないため、swagger のドキュメントに表示されないようにしたいと思います。ただし、Web サイト上の他の「もの」もクラスを使用するため、修飾子を public から変更することはできません。

そのメソッドをswagger-uiのWebページから隠すための適切な構文は何ですか?

4

2 に答える 2

1

これを達成するには2つの方法があります。

1 つは、メソッドをコメントfetchArray付きでプライベートとしてマークすることです。@access privateこれによりfetchArray、PHP で fetchArray に引き続きアクセスできるようにしながら、すべての API URL から削除されます。

あなたの場合の問題は、作曲家によって維持されるフレームワークの一部として PostgreSQL を変更したくないということです。基本クラスから直接拡張する代わりに、コメントを追加する中間クラスを使用してから、以下に示すようにそのクラスを拡張します

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');
于 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 に答える