2013-07-19 183 views
0

我无法找到任何有用的信息。我正在尝试创建RESTful路由。以下是我希望我的路线是这样的:CakePHP宁静路线

`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

貌似可以做到这一点

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

,并且会给你预期的URL。你还必须定义前缀,就像@johhniedoe指出的那样。

This是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')); 
+0

感谢。这对我不起作用:(它适用于GET,但是当我有DELETE/api/recepies/1时,它会返回404 missing Recepies :: api_1(),我希望它去到REcepies :: api_delete(1)任何想法如何解决它?我得到DELETE/api/recepies /删除/ 1将工作,但我试图远离那。 –

+0

我假设“接收”是一个错字,对吗?检查与所有其他方法,如果它适用于GET和所有其他人,但删除它可能是调用REST操作的函数的问题。如果这部分没有错误,请尝试使用'resourceMap'覆盖缺省值(我将更新答案) – Nunser

+0

它不适用于任何它,我只是使用DELETE作为示例。谢谢,我会尝试,如果有效,我会将答案标记为已接受。感谢您回复我。 –