0

好吧,这里一个更好的标题可能是“CakePHP 中的 REST 渐进增强”,但至少现在我知道如果你的答案只是指两者之间的区别,你没有读过这个问题;)

我非常熟悉 REST 以及如何将它与 CakePHP 集成,但我并不是 100% 了解如何仍然维护一个常规功能的网站。使用 Router::mapResources 听起来是个好主意,但这会在维护站点的“优雅降级”版本方面产生问题,因为对 /resource/ 的 POST 请求和对 /resource/add 的 GET 请求都会路由到相同的操作(添加)。显然,如果他们使用的是 REST api,我希望此操作返回一个 JSON 对象,但如果他们使用的是网站的降级版本(可能没有 JS),它应该是一个添加表单,对吧?

处理这个问题的最佳方法是什么。您是否使用 Router::resourceMap() 将 REST 请求路由到其他操作名称?你有没有做过我看到的那种疯狂的黑客行为,有 /api/ 前缀部分的资源映射,所以你可以使用 api_action 函数?您是否通过检查 isAjax() 来处理 REST 和常规请求的操作?如果是这样,您如何确保可以依赖浏览器正确支持其他两种请求类型?

我已经搜索了很多,但没有找到任何关于如何在 Cake 中保持传统请求与 REST 一起可用的任何信息,所以如果有人有任何建议或经验,我很想听听!

4

1 回答 1

0

CakePHP 也使用扩展路由,通过 Router::parseExtension() 所以;

  • /test/action 将呈现视图/test/action.ctp
  • /test/action.html 也
  • /test/action.json 将呈现视图/test/json/action.ctp
  • /test/action.xml 将呈现视图/test/xml/action.ctp

如果所有视图都设计为处理控制器设置的相同数据,那么您将能够显示常规 HTML 表单并以与处理 AJAX 请求相同的方式处理发布的数据。

如果在 /add、/edit、/delete 操作中发布/提交了任何数据,您可能需要添加检查,以防止在未发布表单的情况下删除项目(虽然尚未测试,可能是蛋糕如果为控制器设置了 mapresources,则阻止这些 url)

CakePHP 中的 REST:http: //book.cakephp.org/2.0/en/development/rest.html

(扩展)路由 http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

于 2013-02-05T22:30:46.353 回答