Backbone.js、Slim PHP、およびParis/Idiormがどのように連携するかを理解しようとしていますが、モデル属性データからデータベースに至るまでのフローを完了するのに問題があります。問題: model.save() を実行すると、正確には何がサーバーに送信されますか?
クライアント側: 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 に送信されますが、何を送信するのかという質問があります。そして、どのような形式で?私が望む結果は、これらのドーナツ属性を自分の DB に保存することです。jQuery $.post()... を使用して、このサーバー側コードにこのような json を渡すことができます。
var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);
...そして喜んでそれを受け取り、私のデータベースに保存します。しかし、現在のセットアップでバックボーン ドーナツ データを送信しようとすると、POST 500 内部サーバー エラーが発生します。以下に、サーバー側のコードをいくつか示します。
サーバー側: スリムな PHP w/ Paris
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 エラーが返されますが、FAIL 応答として XMLHttpRequest も返されます。XMLHttpRequest からの唯一の注目すべき手がかりは、responseText = SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null. です。
したがって、私の推測では、1) save() が属性を正しくキャプチャしていないという点で、何かを台無しにしている、2) 現在、サーバーが認識していない形式で属性を送信している標準の $app->request()->post() スリムなメソッド ($_POST で直接アクセスしようとしてもあまり効果がないようです), 3) サーバーが正しく設定されていないため、送信中です。
どうすればいいのかわかりませんが、私が気づいたもう1つのことは、追加するときです
echo $_POST;
空の配列が返されます。それでも失敗します。しかし、これを行うと...
echo json_encode($_POST);
それは私に成功を与え、応答は [ ] です。そこには何もありません。明らかに、私の POST データはまだ不安定です。