Как отправить данные модели магистрали в БД через Slim php и Paris

Я пытаюсь понять, как 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, который маршрутизируется, но у меня вопрос: ЧТО он отправляет? А в каком формате? Результат, который я хочу, - сохранить эти атрибуты пончика в моей БД. Я могу передать этот серверный код в виде json, используя jQuery $ .post () ...

var myDonut = {"name":"Jelly Filled", "sparkles":false, "creamFilled":true};
$.post('http://localhost/donut', myDonut);

... и он с радостью принимает его и сохраняет в моей базе данных. Но с текущими настройками, пытающимися отправить мои данные опорного бублика, я получаю внутреннюю ошибку сервера POST 500. Ниже у меня есть код на стороне сервера.

На стороне сервера: Slim 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
});

У меня есть ощущение, что ответ уже есть, но в каждом примере, который я рассмотрел, не хватает того или иного фрагмента головоломки, и я не могу понять что "А-ха!" момент. Я заранее благодарю вас и прошу прощения, если это действительно невежественный вопрос.:-P

FOLLOWUP / EDIT: 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);
    }
});

Теперь, когда я запускаю backbone save (), я все еще получаю ошибку 500, но также и XMLHttpRequest в качестве ответа FAIL. Единственная примечательная подсказка из XMLHttpRequest - responseText = SQLSTATE [23000]: нарушение ограничения целостности: 1048 «Имя» столбца не может быть пустым.

Итак, я предполагаю, что либо 1) я что-то испортил с save () в том смысле, что он неправильно фиксирует мои атрибуты, 2) в настоящее время он отправляет мои атрибуты в формате, который мой сервер не распознавание стандартными методами $ app-> request () -> post () Slim (похоже, мало что делает, когда я пытаюсь получить доступ напрямую с помощью $ _POST), 3) Мой сервер неправильно настроен, чтобы принять вид отправляемых данных.

Еще я заметил, хотя не знаю, что с этим делать, это то, что когда я добавляю

echo $_POST;

, он возвращает мне пустой массив. Все еще дает мне FAIL. Однако, если я сделаю ЭТО ...

echo json_encode($_POST);

Это дает мне УСПЕХ и ответ - []. Там ничего нет. Ясно, что мои данные POST все еще нестабильны.

18
задан jmk2142 30 January 2012 в 02:35
поделиться