CakePHP宁静的路线

时间:2013-07-19 02:38:44

标签: php api rest cakephp cakephp-2.0

我找不到任何有用的东西。我正在尝试创建RESTful路由。这就是我希望我的路线看起来像:

`GET`    routes to `RecipesController::api_index() //instead of RecipesController::index()`
`POST`   routes to `RecipesController::api_add() //instead of RecipesController::add()`
`PUT`    routes to `RecipesController::api_edit($id) //instead of RecipesController:edit($id)`
`DELETE` routes to `RecipesController::api_delete($id) //instead of RecipesController:delete($id)`

我不知道该怎么做,这是我到目前为止所做的:

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

Router::mapResources('recipes', array('prefix'=>'api'));

在我core.php我有以下内容:

Configure::write('Routing.prefixes', array('api'));

Cake返回:

  

404缺少Recepies :: api_1()

以下是我用的CakePHP文档

此外,非常感谢有关正确的RESTful API设计的任何其他建议! :)

2 个答案:

答案 0 :(得分:4)

看起来你可以这样做

Router::mapResources('recipes', array('prefix'=>'api'));

这将为您提供预期的网址。您还必须定义前缀,例如@johhniedoe指出。

This是api doc,我从那里读取(它是v2.0,但是从v1.3开始工作),也许它会有所帮助。重要的部分是它所说的

  

'prefix' - 用于生成的路由的URL前缀。默认为   “/'.

选项。因此,如果您激活前缀并将其添加到mapResources,则无需执行任何操作即可获得所需内容。如果您想要的路由是默认路由,则无需使用resourcesMap或您定义的其他路由,mapResources应自行处理所有路由。

修改

如果默认值需要覆盖

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

Router::mapResources('recipes', array('prefix'=>'api'));

答案 1 :(得分:0)

在Config / core.php中:对我来说124(取决于你的版本)有前缀的定义,你可以实现你想要的。

Configure::write('Routing.prefixes', array('api'));

您可能还会发现此链接很有用:http://book.cakephp.org/2.0/en/development/routing.html#using-additional-conditions-when-matching-routes

有一个好的。