我使用的是restler 2.0,我试图基于crud示例添加一个新的路由

$o['GET']['author/:name/:email']=array (
  'class_name' => 'Author',
  'method_name' => 'getLogin',
  'arguments' =>
  array (
    'name'  => 0,
    'email' => 1,
  ),
  'defaults' =>
  array (
    0 => NULL,
    1 => NULL,
  ),
  'metadata' =>
  array (
  ),
  'method_flag' => 0,
);

当我在浏览器中进行url调用时http://[host]/author/[name to pull]/[email to pull]
我得到以下错误:
{
  "error": {
    "code": 404,
    "message": "Not Found"
  }
}

my author code has been updated with the following method

function getLogin($name=NULL,$email=NULL) {
    print "in author, getting login";
    return $this->dp->getLogin($name,$email);
}

我被难住了。

最佳答案

Luracast Restler自动布线
首先,routes.php是在生产模式下运行restler时自动生成的。

$r = new Restler(TRUE);

当我们调用
$r->refreshCache();

或者在调试模式下运行,所以不应该手工编码。
restler 2.0使用了自动映射,这在更新的CRUD Example中得到了更好的解释。
你的方法的正确版本应该是
function get($name=NULL,$email=NULL) {
    print "in author, getting login";
    return $this->dp->getLogin($name,$email);
}

将映射到
GET /author/:email/:password

方法当前映射到的位置
GET /author/login/:email/:password

Luracast Restler自定义路由
还要注意,可以使用phpdoc注释创建自定义映射,并且可以添加多个映射。例如
/*
* @url GET /custom/mapping/:name/:email
* @url GET /another/:name/:email
*/
function get($name=NULL,$email=NULL) {
    print "in author, getting login";
    return $this->dp->getLogin($name,$email);
}

这将创建以下路由,并禁用该方法的自动路由。
GET /author/custom/mapping/:email/:password
GET /author/another/:email/:password

10-08 12:55