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

您可以使用@url phpdoc 装饰器告诉restler 任何与直接类-> 方法映射不匹配的特殊调用方案。

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

}

..应该可以工作。

于 2012-11-23T00:48:47.913 回答
0

一种方法是使用条件块在同一函数中处理这两种情况,如下所示

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
    }
}

另一种方法是拥有多个函数,因为 index 也映射到 root,你有几个选项,你可以将你的函数命名为 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)
{

}

高温高压

于 2012-11-23T07:51:31.227 回答