0

好的,基本上我正在向 Codeigniter 发送一个包含一些 JSON 有效负载的 POST 请求。我使用 RESTadapater。JSON 在没有密钥的情况下被发送到那里,所以我无权访问它。

这是模型:

App.Bookmark = DS.Model.extend({
    title: DS.attr("string"),
    url : DS.attr("string")
});

这是控制器:

App.BookmarksNewController = Ember.ObjectController.extend({
    save: function(){
        this.get("model.transaction").commit();
        this.get("target").transitionTo("bookmarks");
    }
});

在 CI 中的 REST 实现中,我使用标准方式访问发布请求是$this->input("key"). 但是当生成上述请求时,只发送原始 JSON 数据。因此,我似乎没有办法以任何方式引用它。

举个例子:

function post(){
    $this->response(var_dump(file_get_contents("php://input")),200);
}

给我这个输出:

string(48) "{"bookmark":{"title":"sdffdfsd","url":"sdfsdf"}}"

我想看到的是:

string(48) payload="{"bookmark":{"title":"sdffdfsd","url":"sdfsdf"}}"

然后是服务器,我可以使用类似的东西访问这个 JSON$this->post("payload").

所以 1 of 2. 无论如何要用密钥包装 JSON 有效负载?或者无论如何在没有可用密钥的情况下访问 CI 中的原始 JSON 数据?

4

1 回答 1

0

好的,我自己想通了(或者更确切地说是正确阅读示例)。

当使用 Adam Whitney 的 Phil Sturgeons REST 控制器 fork for CodeIgniter时,JSON 有效负载将在$this->_post_args. 在底层实现中,他使用了我已经提到file_get_contents("php://input")的 .

编辑:同样的约定也适用于其他类型的请求,例如 DELETE 请求数据将在$this->_delete_args. 或者$this->_args是可以找到所有类型 args 的“神奇”地方。

于 2013-04-15T14:53:29.760 回答