18

Backbone.jsSlim 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 データはまだ不安定です。

4

3 に答える 3

1

「正確に何がサーバーに送信されるか」を知りたい場合は、Backbone のコードの Backbone.sync 関数を確認する必要があります。それは非常によく文書化されており、段階的に説明されています。次に、必要なことを達成するための最もクリーンな方法は、Backbone の同期に触発された独自の同期関数を作成することです。

また、サーバーに何が送信されているかを確認する簡単な方法は、ブラウザーのデバッグ コンソール ([ネットワーク] タブ) を使用することです。ここで、Backbone によって送信されるものと $.post を直接使用したときに送信されるものを比較できます。さらにヘルプが必要な場合は、この情報を投稿してください。

于 2012-01-29T15:55:45.327 に答える
0

バックボーンは json データを php バックエンド サーバーに送信します。このバックエンド サーバーは、RESTful API を公開して、get、post、put、delete などの http 動詞に応答する必要があります。

バックエンド API は、データベースとの通信を担当します。

SLIM PHPについてはよくわかりません。リクエストを処理しているようです。エラーメッセージを貼り付けていただけますか?

于 2012-01-29T18:23:28.717 に答える