Я пытаюсь понять, как 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 Internal Server Error. Ниже у меня есть некоторый код на стороне сервера.
Серверная часть: тонкий PHP с Парижем
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
});
У меня такое чувство, что ответ там, но каждый пример, на который я смотрел, кажется, пропускает тот или иной кусок головоломки, и я не могу получить это "А-ха!" момент. Я заранее благодарю вас и прошу прощения, если это действительно невежественный вопрос. : -Р
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);
}
});
Теперь, когда я запускаю опцию 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 все еще шаткие.