我試圖理解Backbone.js,Slim PHP和Paris/Idiorm可能如何協同工作,並且我無法完成流程,從模型屬性數據開始,一直到數據庫。問題:當我使用model.save()時,究竟發送給我的服務器的是什麼?如何通過Slim php和Paris將骨幹模型數據發佈到數據庫
客戶端:Backbone.js的
var Donut = Backbone.Model.extend({
defaults: {
name: null,
sparkles: false,
creamFilled: false
},
url: function() {
return '/donut';
}
});
var bostonCream = new Donut({
name: 'Bawston Cream',
sparkles: true,
creamFilled: true
});
bostonCreme.save(); // <-- Problem: Not sure what & format this is sending
我覺得上面的是我的主要問題。我的理解是骨幹將默認情況下知道發送POST數據,因爲它是新的。它將它發送給路由的/ donut,但是我的問題是它發送了什麼?並以什麼格式?我想要的結果是將這些甜甜圈屬性保存到我的數據庫中。我可以通過這個服務器端代碼一個JSON像這樣使用jQuery $。員額()...
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
...它高興地需要它,它保存到我的數據庫。但目前的設置嘗試發送我的主幹圓環數據,我得到POST 500內部服務器錯誤。下面我有一些服務器端代碼。
服務器端:修身PHP瓦特/巴黎
class Donut extends Model {}
$app->post('/donut', function() use ($app) { // Slim framework routes my POST...
$donuts = Model::factory('Donut')->create(); // Paris stuff...
$donuts->name = $app->request()->post('name'); // Slim request parameters...
$donuts->sparkles = $app->request()->post('sparkles');
$donuts->creamFilled = $app->request()->post('creamFilled');
$donuts->save(); // Paris... Save name, sparkles, and creamFilled to my DB
});
我有一種感覺,答案就在那裏,但每次我已經看了例子似乎缺少一塊拼圖或其他與我無法得到那個「A-hA!」時刻。如果這是一個非常無知的問題,我事先感謝你並道歉。 :-P
隨訪/編輯:1
可以粘貼的錯誤信息?
我在當前狀態下得到一個POST http://localhost:8888/donut 500(內部服務器錯誤)。我可以通過以下代碼獲取更多信息。
bostonCream.save({}, { // REPLACE bostonCream.save();
success: function(model, response) {
console.log('SUCCESS:');
console.log(response);
},
error: function(model, response) {
console.log('FAIL:');
console.log(response);
}
});
現在,當我運行骨幹的save(),我仍然得到500錯誤,而且作爲的XMLHttpRequest我的失敗響應。 XMLHttpRequest唯一值得注意的線索是responseText = SQLSTATE [23000]:完整性約束違規:1048'name'列不能爲空。
所以我的猜測是要麼1)我把save()的東西搞亂了,因爲它沒有正確捕獲我的屬性,2)它當前發送我的屬性的格式是我的服務器不是' t用標準的$ app-> request() - > post()Slim方法來識別(當我嘗試直接用$ _POST進行訪問時,似乎沒有太多的工作),3)我的服務器沒有正確設置,正在發送的數據種類。
另一件事我注意到,雖然我不知道做的是什麼,當我添加
echo $_POST;
它返回給我一個空數組。仍然給我失敗。但是,如果我這樣做...
echo json_encode($_POST);
它給了我一個成功和答覆是[]。那裏沒有東西。很明顯,我的POST數據仍然不可靠。
你是個好人!對於這個問題+答案是一個加號。謝謝! – 2012-08-19 04:20:21
嗨orangewarp,我一直在使用Backbone和Slim在同一個問題上掙扎。我覺得很奇怪,儘管你必須使用getBody(),但根據你的請求使用post()或put()更合適。 – Maarten 2012-11-23 12:29:47
您可以讓Slim爲您解析JSON。你仍然需要調用getBody()。請求的post()方法不支持ContentType中間件所做的解析,並且似乎只處理表單數據。實例化$ app後,執行以下操作:$ app-> add(new \ Slim \ Middleware \ ContentTypes()); //獲取傳入的JSON解析。之後,getBody()返回一個很好的解析數據數組。 – 2012-12-12 20:07:02