CakePHP3 API请求PUT方法兼容性问题

时间:2019-09-27 10:02:16

标签: javascript cakephp-3.0 crud restful-authentication

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

由于我要处理图像,因此需要将FormData对象传递给后端。对于我的Add方法(这是POST请求),这可以正常工作。但是,在编辑方面,我应该使用PUT方法。编辑不起作用,我相信这是因为PUT与表单数据不兼容。

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

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

更新

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

对于在调试相同对象时“起作用”的“ add”方法,我看到了希望看到并希望保存的新实体数据。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

感谢@ndm的耐心等待,并帮助我发现解决方案。