Я пытаюсь понять, как 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
});
У меня есть чувство, что ответ есть, но каждый пример, на который я смотрел, кажется, пропускает один кусок головоломки или другой, и я не могу получить это "A-hA!". момент. Я благодарю вас заранее и извиняюсь, если это действительно неосведомленный вопрос.:-P
FOLLOWUP/EDIT: 1
Можете ли вы вставить сообщения об ошибках?
Я получаю POST http://localhost:8888/donut 500 (Internal Server Error) в текущем состоянии. Я могу получить дополнительную информацию со следующим кодом.
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;
Он возвращает мне пустой массив. Все еще дает мне ФАЙЛ. Если я это сделаю, то...
echo json_encode($_POST);
Это дает мне УСПЕХ, а ответ - []. Ничего. Понятно, что мои данные POST по-прежнему неустойчивы.