【问题标题】:CakePHP REST Put/Post not accepting dataCakePHP REST Put/Post 不接受数据
【发布时间】:2013-05-25 02:02:26
【问题描述】:

我正在尝试使用 CakePHP 2.3.5 编写一个 RESTful 服务。到目前为止,我已经成功地为我正在使用的资源创建了 GET 函数。我可以向example.com/areas.jsonexample.com/areas/1.json 发送一个GET 请求,它会返回我数据库中的数据。

但是,我开始尝试让编辑功能正常工作。我写了一个简单的编辑方法,简单地保存了来自$this->request->data 的传入数据。我正在使用 Postman 测试功能并通过 PUT 或 POST 将原始 JSON 发送到 example.com/areas/1.json 返回一条消息,告诉我无法保存数据。我让该方法在失败时向我发送更多信息,它告诉我$this->request->data$this->data 中没有传入数据。

我一直在 Internet 上搜索此问题或类似问题的解决方案,但到目前为止我所尝试的一切都失败了。我尝试禁用 CSRF 检查,完全禁用 SecurityComponent,以及其他多个涉及安全性的修复。更改其中任何一项都会导致请求黑洞化。

有没有人对我可以尝试让 CakePHP 接受 JSON 数据到请求中的其他方法有什么想法?如果有帮助,我将在下面包含我的编辑功能。

public function edit($id)
{
    $this->Area->id = $id;
    $message['request-data'] = $this->request->data;
    if ($this->Area->save($this->request->data)) {
        $message['response'] = $this->Area->findById($id);
    } else {
        $message['response'] = "Error";
    }
    $this->set(array(
        'message' => $message,
        '_serialize' => array('message')
    ));
}

【问题讨论】:

    标签: php json rest cakephp cakephp-2.3


    【解决方案1】:

    首先,确保请求的 Content-Type 是 application/json。

    其次,CakePHP 不会自动解码 JSON 负载;你必须手动完成。来自manual

    // Get JSON encoded data submitted to a PUT/POST action
    $data = $this->request->input('json_decode');
    

    【讨论】:

    • 非常感谢。我曾假设 json_decode 将根据REST 上的手册部分自动调用。它确实说“默认情况下它将解码任何传入的 JSON/XML 输入数据”,但这似乎不是真的。
    猜你喜欢
    • 2016-12-07
    • 2018-08-23
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2018-01-01
    • 2022-08-20
    • 2013-03-30
    • 1970-01-01
    相关资源
    最近更新 更多