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/json
或RequestHandler
将其视为普通的GET 请求。
你解决过这个问题吗?我的应用程序也遇到了与 RestClient 工具完全相同的问题。
【参考方案1】:
有同样的问题。就我而言,我可以通过更改 URL 中的控制器名称来修复它。
没用:http://www.example.com/entityName.json
工作正常:http://www.example.com/entity_name.json
【讨论】:
其实这是有道理的。mapResources
函数对控制器名称执行Inflector::underscore
,因此entityName/:action
和entity_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 未按预期工作