0

.. 説明的なタイトルが思い浮かびませんでした。私が求めているのは、これをどのように行うかです。

次の 2 つの API 呼び出しが必要です

 GET /api/users/2/duels - returns all of the duels for user 2 
 GET /api/users/2 - returns the profile for user 2

PHP はメソッドのオーバーロードをサポートしていないため、これを機能させる方法が明確ではありません。

現在、私は機能を持っています

 function get($id, $action){
      //returns data based on action and id
 }

そして、私はただ作ることはできません

 function get($id){
      //returns profile based on id
 } 

と言った理由からです。

どんな助けでも大歓迎です!!!

4

2 に答える 2

0

1つのアプローチは、以下に示すように、条件付きブロックを使用して同じ関数で両方のケースを処理することです

function get($id, $action=null){
    if(is_null($action)){
        //handle it as just $id case
    }else{
        //handle it as $id and $action case
    }
}

restler 3 以降を実行している場合は、スマート ルーティングを無効にする必要があります。

/**
* @smart-auto-routing false
*/
function get($id, $action=null){
    if(is_null($action)){
        //handle it as just $id case
    }else{
        //handle it as $id and $action case
    }
}

別のアプローチは、インデックスもルートにマップされるため、複数の関数を使用することです。オプションはほとんどありません。関数にget、index、getIndexなどの名前を付けることができます

function get($id, $action){
    //returns data based on action and id
}
function index($id){
    //returns profile based on id
}

Restler 2 を使用している場合、またはオフにしている場合は、あいまいさsmart routingを解消するために関数の順序が重要です。

関数名のオプションが不足している場合は、@fiskfisk が提案するように @url マッピングを使用できますが、次を使用してオフにしない限り、クラスルートは常に先頭に追加されるため、ルートにはメソッドレベルからのみ含める必要があります$r->addAPIClass('MyClass','');

function get($id){
    //returns data based on action and id
}

/**
 * @url GET :id/duels
 */
function duels($id)
{

}

HTH

于 2012-11-23T07:51:31.227 に答える
0

@url phpdoc デコレーターを使用して、直接のクラス -> メソッド マッピングと一致しない特別な呼び出しスキームを restler に伝えることができます。

/**
 * @url GET /api/users/:userId/duels
 */
public function getDuels($userId)
{

}

..おそらく動作するはずです。

于 2012-11-23T00:48:47.913 に答える