我使用的是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