CakePHP REST 基本映射未按预期工作

Posted

技术标签:

【中文标题】CakePHP REST 基本映射未按预期工作【英文标题】:CakePHP REST Basic Mapping Not Working As Expected 【发布时间】:2013-02-13 10:13:54 【问题描述】:

几乎完全按照蛋糕书的例子。

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

之前都是

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

我的控制器名为 IncidentReportsController

class IncidentReportsController extends AppController 

其中包含函数

index()
view($id)
add()
edit($id)
delete($id)

转到网址

www.myurl.com/incidentReports.json

按预期将请求发送到 index() 函数。

转到网址

www.myurl.com/incidentReports/260.json

应该映射到 view() 函数,但尝试映射到不存在的 260() 函数。

www.myurl.com/incidentReports/view/260.json

是否映射到 view() 函数并正常工作。但是,我的理解是 URL 中的“视图”不应该是必需的。

【问题讨论】:

您是否将RequestHandlerComponent 包含在您的应用程序或 IncidentReportsController 中? 它在里面。不过谢谢你的想法。 您是如何尝试请求的?用浏览器?已经尝试过像 Postman(谷歌 Chrome 浏览器应用程序)这样的休息客户端?另一个问题可能是 RequestHandler 只查看 HTTP 请求中的 Accept 标头。你需要一个Accept: application/jsonRequestHandler 将其视为普通的GET 请求。 你解决过这个问题吗?我的应用程序也遇到了与 RestClient 工具完全相同的问题。 【参考方案1】:

有同样的问题。就我而言,我可以通过更改 URL 中的控制器名称来修复它。

没用:http://www.example.com/entityName.json 工作正常:http://www.example.com/entity_name.json

【讨论】:

其实这是有道理的。 mapResources 函数对控制器名称执行Inflector::underscore,因此entityName/:actionentity_name/:action 之间将不匹配。这发生在 1.3 版(或之前,没有检查)。 API reference.【参考方案2】:

根据documentation,你做的一切都是对的,所以我不确定。试着把这个(应该启用的路由)也放在你的路由中。

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

【讨论】:

正是我的想法,只是在发布此问题之前就这样做了。没有变化。【参考方案3】:

如果您的控制器在插件中,您也必须指定..

例如: Router::mapResources('Plugin.Controller');

【讨论】:

以上是关于CakePHP REST 基本映射未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

嵌套查询未按预期工作

Webhook 响应上的 Google 操作提示链接 URL 未按预期工作

C 基本代码未按预期工作

嵌套排序未按预期工作 ElasticSearch

Jersey Spring-Security HTML AJAX 未按预期工作

@Transactional 注释未按预期工作