Intereting Posts
Prestashop Web-сервис для возвращения JSON Очистка данных пользователя в GET с помощью PHP Доступ к дополнительным параметрам в запросах веб-сокетов Ratchet Получение абсолютного пути внешних изображений веб-страницы список каталогов apache, скачать все PHP, если операторы с несколькими значениями Можно ли использовать переменные среды в php.ini? Автоматическое создание правила цены покупок в Magento Объединение HTML и PHP для создания ссылки на изображение Как отслеживать выполнение кода в PHP? Ранжирование значений столбцов в базе данных MySQL Проверка формы перестает работать при визуализации страниц с использованием другого контроллера Показывать три изображения от каждого пользователя Magento – Невозможно переопределить цены на продукцию – Нарушение внешнего ключа не работает CMS: хранить пользовательские страницы в виде файлов или в базе данных MySQL?

Как получить данные базовой модели POST в DB через 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 }); 

У меня есть чувство, что ответ есть, но каждый пример, на который я смотрел, кажется, пропускает одну часть головоломки или другой, и я не могу получить это «A-hA!». момент. Я благодарю вас заранее и извиняюсь, если это действительно неосведомленный вопрос. :-П

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's 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 по-прежнему неустойчивы.

Я придумал решение для решения проблемы: как получить данные от клиента на сервер, используя по умолчанию backbone save () и .sync – переданные в платформу Slim php и проходящие через Paris / Idiorm в мою БД.

Я включаю в себя мой обновленный обновленный код ниже:

Клиентская сторона: 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 }); bostonCream.save(); /***** If you want to check out the response to save() ? *** bostonCream.save({}, { success: function(model, response) { console.log('SUCCESS:'); console.log(response); }, error: function(model, response) { console.log('FAIL:'); console.log(response); } }); ************************************************************/ 

Северный: Тонкий PHP с Парижем / Idorm

 class Donut extends Model {} $app->post('/donut', function() use ($app) { $donuts = Model::factory('Donut')->create(); /* EDIT: Works... but not the Slim way $parameters = json_decode(file_get_contents('php://input'), true); $donuts->name = $parameters['name']; $donuts->sparkles = $parameters['sparkles']; $donuts->creamFilled = $parameters['creamFilled']; */ /* SLIM: Using Slim Request Object */ $requestBody = $app->request()->getBody(); // <- getBody() of http request $json_a = json_decode($requestBody, true); $donuts->name = $json_a['name']; $donuts->sparkles = $json_a['sparkles']; $donuts->creamFilled = $json_a['creamFilled']; $donuts->save(); // echo json_encode($parameters); // Prove you've captured POST data, send it back } 

Теперь мой код с радостью использует настройки по умолчанию Backbone.js (никаких изменений в синхронизации) и отправка соответствующей информации о атрибутах модели на мой сервер, который, кажется, успешно принимает данные и сохраняет их в моей БД.

Ключевым моментом здесь является эта линия …

 /* $parameters = json_decode(file_get_contents('php://input'), true); */ // EDITED: getBody() method not documented in Develop Doc, only Stable @ time of post $requestBody = $app->request()->getBody(); 

Если вы хотите узнать, что именно отправлено на сервер, вы должны посмотреть на функцию Backbone.sync в коде Backbone . Это очень хорошо документировано, шаг за шагом. Тогда самый чистый способ добиться того, что вам нужно, – написать вам собственную функцию синхронизации, вдохновленную синхронизацией Backbone.

Кроме того, быстрый способ увидеть, что отправлено на сервер, – использовать консоль отладки браузера (вкладка «Сеть»). Вы можете сравнить здесь то, что отправлено Backbone по сравнению с тем, что отправлено, когда вы напрямую используете $ .post. Если вам нужна дополнительная помощь, отправьте эту информацию!

backbone отправляет данные json на ваш сервер php backend, который вы должны подвергать RESTful api ответам на http-глагол, например get, post, put, delete и т. д.

ваш backend api отвечает за связь с базой данных.

Я не уверен в SLIM PHP. он, похоже, обрабатывает запрос. Можете ли вы вставить сообщения об ошибках?