Я пытаюсь понять, как 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 все еще нестабильны.