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'));

蛋糕返回这个:

404 缺少 Recepies::api_1()

这是我通过的CakePHP文档

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

4

2 回答 2

4

看起来你可以做到这一点

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

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

是我从中读取的api文档(它适用于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'));
于 2013-07-19T14:02:32.710 回答
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

祝你有个好的一天。

于 2013-07-19T08:15:44.747 回答