【问题标题】:CakePHP3 API request PUT method compatiblity issueCakePHP 3 API 请求 PUT 方法兼容性问题
【发布时间】:2020-01-27 15:33:50
【问题描述】:

我正在使用 Cakephp3 CRUD 插件来提供 Resful API。我的前端使用的是 Angular.js。我正在实现一个用户故事,它有助于通过表单上传图片。

由于我正在处理图像,我需要将一个 FormData 对象传递给后端。这适用于我的 Add 方法,它是一个 POST 请求。但是,当涉及到编辑时,我应该使用 PUT 方法。编辑不起作用,我相信这是因为 PUT 与表单数据不兼容。

我已经看到有关 Laravel 的类似问题,对于该框架,有一个解决方法,其中隐藏字段“_method”可以通过 POST 请求发送。

CakePHP 的 Crud 插件有类似的解决方案吗?

更新

“不起作用”是指我发布到 API“编辑”方法的任何新更改都不会保存。此外,如果我在编辑方法的 beforeSave 中调试实体,我会看到当前保存的实体 - 没有区别,我试图从输入中保存。

对于“确实有效”的“添加”方法,如果我调试同一个对象,我会看到我希望看到并希望保存的新实体数据。

【问题讨论】:

  • 尝试使用PATCH 请求。由于您似乎只是对对象进行了部分更新,因此 PATCH 应该是更合适的请求。
  • @TechGnome PATCH 是否与表单数据兼容?
  • PATCH 和 PUT 都可以提交请求正文。这个隐藏字段只是对 HTML 表单仅允许使用 GET 或 POST 的限制的“解决方法”,因此您的 REST API 不必担心。如果您显示调试结果并详细说明“不起作用”部分可能会有所帮助,这可能意味着任何事情。
  • @ndm 请查看我的问题的更新
  • 检查 $this->request->getData()$this->request->input() 是什么,还要确保您的请求实际上发送了任何数据(并且格式正确),并且它发送了 Content-Type 标头application/x-www-form-urlencoded 的值。服务器请求中的This code 应处理输入,请求处理程序组件中的this code 不应运行。

标签: javascript cakephp-3.0 crud restful-authentication


【解决方案1】:

所以在回答我自己的问题时,解决方案与我在问题中提到的问题中使用的方法类似。

主要是因为我需要使用 PUT 方法并且这与 FormData 不兼容,所以我需要用 POST 覆盖该方法。因此,我的请求的标题是:

headers: {
     "Content-Type": undefined,
     "X-HTTP-Method-Override": "PUT"
}

将内容类型设置为未定义也是关键。我希望必须将类型显式设置为多部分,但这样做不会设置请求的“边界”,并且 API 无法解析请求。通过设置 undefined,Angular 前端会检测到多部分类型并为我设置边界。

感谢 @ndm 所表现出的耐心并帮助我找到解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2021-03-16
    • 2023-03-12
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多