主干同步返回一个空$ _POST数组(Backbone Sync return an empty $

2019-09-20 16:27发布

我试图做我的第一个REST风格的应用程序具有骨干和Yii框架。 我曾与GET方法没有问题,但我用POST方法现在卡住了,创建一个新的元素。

我在骨干评论模型:

var commentModel = Backbone.Model.extend({

    urlRoot: "index.php/api/comments",
    idAttribute: 'id',

    defaults: {
        content: "Empty comment",
        status: 1
    }
});

在我看来,我添加了一个函数来创建一个新的评论从相对的形式传递值:

on_submit: function(e) {
            var new_comment = new Comment({author_id: this.$('#author_text').val(), content: this.$('#content_text').val(), post_id: this.$("#post_text").val(), status: this.$("#status_text").val()});

         new_comment.save();
        },

展望与萤火虫似乎没事的要求,在POST选项卡中,我可以看到所有的值:

JSON            
author_id "7"   
content "Epic fail"
post_id "7" 
status "2"

Source 
{"content":"Epic fail","status":"2","author_id":"7","post_id":"7"}

但在我的PHP API的$ _POST变种是空的!

foreach($_POST as $var=>$value) {

     if($model->hasAttribute($var))
        $model->$var = $value;
     else
        $this->_sendResponse(500);
}

任何人有一些想法? 阅读Backbone.Sync的据我所知,它应该使用POST用于创建请求的文档。

我发现了一个解决方法从得到的值:

file_get_contents('php://input') 

但id不觉得我的权利......

谢谢。

Answer 1:

从Backbone.sync文档 ,

用默认的实现中,当Backbone.sync发送一个请求以保存一个模型,它的属性将被传递,序列化为JSON,并在HTTP主体与内容类型的应用程序/ JSON发送。

这意味着你不会在常规形式的文章,但在HTTP响应的主体接收参数数据等。

你有三个选项来处理这种行为:

  1. 修改服务器代码来了解REST请求,请参阅插入Backbone.js的模型转换成MySQL数据库 ,例如
  2. 看看Backbone.emulateJSON可以回答您的需求
  3. 覆盖Backbone.sync和发送数据,以更好地满足您的服务器


文章来源: Backbone Sync return an empty $_POST array