..无法想象一个描述性的标题。我要求的是我该怎么做?
我想要以下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
}
因为上述原因。
非常感谢任何帮助!!!
答案 0 :(得分:0)
您可以使用@url phpdoc装饰器告诉restler任何与直接类 - >方法映射不匹配的特殊调用方案。
/**
* @url GET /api/users/:userId/duels
*/
public function getDuels($userId)
{
}
..应该可以工作。
答案 1 :(得分: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
}
}
另一种方法是拥有多个函数,因为索引也映射到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
,那么功能的顺序对于对抗ambiguity
如果您的函数名称选项不足,可以使用@url mapping作为@fiskfisk建议,但路由应该只包含方法级别,因为类路由始终是前置的,除非您使用$r->addAPIClass('MyClass','');
将其关闭
function get($id){
//returns data based on action and id
}
/**
* @url GET :id/duels
*/
function duels($id)
{
}
HTH