cakephp rest api POST请求调用index()而不是add()

时间:2013-10-07 17:10:34

标签: php json api rest cakephp

我正在开发一个cakephp JSON REST api -

我正在http://book.cakephp.org/2.0/en/development/rest.html关注REST教程并通过Chrome扩展“Advanced REST Client”测试所有内容

我能按预期运行的唯一途径是通过GET请求的index() - 它返回一个我的测试数据数组(如预期的那样)

当我尝试创建新记录时,我收到404,同样我向我的数据库添加了一些测试数据,以便通过ID(36char UUID字段)和请求路由尝试GET Request for recipe到index()函数。

当我尝试做一些简单的获取请求时,我收到以下回复:

{
code: 404
url: "/users/d8d9701e-2f6e-11e3-af16-2513f388d17e"
name: "Action UsersController::d8d9701e-2f6e-11e3-af16-2513f388d17e() could not be found."
}

此处的请求是对用户的GET / d8d9701e-2f6e-11e3-af16-2513f388d17e

在我的routes.php文件中:

Router::resourceMap(array(
    array('action' => 'index', 'method' => 'GET', 'id' => false),
    array('action' => 'view', 'method' => 'GET', 'id' => true),
    array('action' => 'add', 'method' => 'POST', 'id' => false),
    array('action' => 'edit', 'method' => 'PUT', 'id' => true),
    array('action' => 'delete', 'method' => 'DELETE', 'id' => true),
    array('action' => 'update', 'method' => 'POST', 'id' => true)
));

Router::mapResources('users');
Router::parseExtensions('json');

我的UsersController.php看起来像是:http://pastebin.com/bDxRLbTP

注意评论的访问控制规则似乎对我的问题没有影响。无论如何,我已经尝试过,有没有控制规则,我不是100%肯定存在于正确的地方。但我认为由于一些CORS问题,POST无法正常工作。但是,在尝试查找特定记录时,它无法解释GET问题。

根据教程,我觉得我实际上不需要Router :: resoureMap功能,但我还是把它扔了以防万一。我也尝试将它放在Router :: mapResources调用下面 - 但在教程中它说:

  

“通过覆盖默认资源图,将来对mapResources()的调用将使用新值。”

所以我很确定在调用mapResources()

之前需要调用它

谢谢!

1 个答案:

答案 0 :(得分:0)

问题是,我的函数显然位于routes.php文件的错误区域。

根据:CakePHP - REST POST functionality not working with default mapping

在routes.php中,我将以下内容作为文件的最后一行。

Router::mapResources('users');
Router::parseExtensions('json');

他们需要被移到这一行之上:

require CAKE . 'Config' . DS . 'routes.php';