序列化一个对象,然后发送到服务器,laravel?

时间:2014-01-11 08:10:51

标签: javascript php backbone.js

我正在序列化一个表单并成功获取我想要发送的对象,但是当发出POST请求时,浏览器只传入playerName属性,只传递该属性,即使我更改输入名称和在playerName的地方传递另一个属性,除非它是playerName attr。否则它将无法通过。

这是我的backbone.js javascript代码,用于将表单另存为对象。

savePlayer: function(e) {
    e.preventDefault();
    var playerDetails = $(e.currentTarget).serializeObject();

    console.log(playerDetails); // this returns perfectly with all attributes

    // I tried this with a model, saving it
    var player = new App.Models.Player();
    player.save(playerDetails);

    // and with a collection creating it
    var playersCollection = new App.Collections.PlayersCollection();
    playersCollection.create(playerDetails);

    return false;
}

现在我正在尝试保存两个属性playerNameteamID,因此当调用save / create时,表单会像{playerName: 'mike', teamID: '2'}一样顺序序列化,有一个POST方法和控制器处理下面的内容。

// First attempt
public function store()
{
    return Player::create(array( 
        'playerName' => Input::get('playerName'),  
        'teamID' => Input::get('teamID')       
    ));
}

//Second try
public function store()
{
    // I used this
    $input = Input::json();
    // And this (not same time lol)
    $input = Input::all();

    return Player::create(array( 
        'playerName' => $input->playerName, 
        'teamID' => $input->teamID       
    ));

}

在POST回复中,似乎属性确实传递到Post标签,但在ResponseJSON中,它们不会仅显示playerName ATTR。

发表

//source
{"playerName":"Joesph","teamID":"1"} // Good

但在

响应

//It gets an id for the table, a smart feature from backbone.js 
{"playerName":"Joesph","id":23} // Missing "teamID":"1"?

这里的额外措施是我的表格。

      新玩家

  <label>First & Last Name</label>
  <input name="playerName" type="text" value="">
  <hr />
  // Here I tried dynamic like below and static, just passing in a number like "2"
  <input type="hidden" name="teamID" value="<%= team.teamID %>" />
  <button type="submit" class="btn">Create</button>                 

上面的表格代替playerName我尝试使用teamID,以及模型上的其他属性,除了attr之外什么都不起作用?

1 个答案:

答案 0 :(得分:0)

好的,这对我有用,因为它对我没有多大意义,但在向服务器发送数据时,我需要使用$fillable变量。我想我需要阅读更多相关内容。

// I needed to add it to this array
protected $fillable = array('playerID', 'playerName', 'teamID');

因此,此代码位于我的模型中,类名为Player,这是该模型的完整代码。

class Player extends Eloquent {
    public $timestamps = false;
    protected $fillable = array('playerID', 'playerName', 'teamID');
}

现在我原来帖子中的代码工作,很讨厌像这样的小挫折。希望我没有浪费任何时间,我希望这可以帮助使用backbone.js和laravel的人!