Уровень опыта: новичок.
Демо-версия backbone.js Todos использует localStorage. Этот вопрос касается того, как использовать PHP для работы с этой страницей, предполагая, что MySQL DB был настроен.
Я проверил фреймворки PHP, такие как CodeIgniter, но обнаружил, что их трудно отслеживать и, возможно, перегружать для моих целей обучения.
Я понимаю концепцию создания REST API. Я действительно ищу простые образцы кода. Заранее спасибо.
Обновление: есть ли где-то полный справочник backbone.js, который включает полный рабочий пример того, как подключиться к серверной стороне PHP?
Самый простой и простой подход (я знаю), который должен помочь вам начать, будет:
Учитывая, что у вас есть модель / коллекция, определите ее с помощью URL-адреса:
resourceCollection: Backbone.Collection.extend ({ url: '/page.php' })
Создайте файл page.php (в корневом каталоге документа), просто позаботьтесь о RewriteRules и т. Д., Которые вы можете использовать!
Теперь мы должны убедиться, что мы можем правильно реагировать на получение, размещение, публикацию и удаление; поэтому мы должны проверить метод запроса, например, с помощью оператора switch. Случаи будут GET, DELETE, PUT, POST:
switch ( $ _SERVER ['REQUEST_METHOD'] ) {…}
Следующее должно дать вам представление (php-контроллеры реализованы с использованием платформы Silex framework + Paris для доступа к данным):
// GET /{resource}/{id} Show $app->get('/api/todos/{id}', function ($id) use ($app) { $todo = $app['paris']->getModel('Todo')->find_one($id); return new Response(json_encode($todo->as_array()), 200, array('Content-Type' => 'application/json')); }); // POST /{resource} Create $app->post('/api/todos', function (Request $request) use ($app) { $data = json_decode($request->getContent()); $todo = $app['paris']->getModel('Todo')->create(); $todo->title = $data->title; $todo->save(); return new Response(json_encode($todo->as_array()), 200, array('Content-Type' => 'application/json')); }); // PUT /{resource}/{id} Update $app->put('/api/todos/{id}', function ($id, Request $request) use ($app) { $data = json_decode($request->getContent()); $todo = $app['paris']->getModel('Todo')->find_one($id); $todo->title = $data->title; $todo->save(); return new Response('Todo updated', 200); }); // DELETE /{resource}/{id} Destroy $app->delete('/api/todos/{id}', function ($id) use ($app) { $todo = $app['paris']->getModel('Todo')->find_one($id); $todo->delete(); return new Response('Todo deleted', 200); });
Чтобы получить вашу базовую коллекцию, работающую с указанным выше интерфейсом, все, что вам нужно сделать, это установить свойство URL как:
window.TodoList = Backbone.Collection.extend({ model: Todo, url: "api/todos", ... });
Недавно я написал учебное пособие о том, как делать GET / POST / PUT / DELETE с помощью Backbone.js и PHP http://cambridgesoftware.co.uk/blog/item/59-backbonejs-%20-php-with-silex -microframework-% 20-mysql , может быть полезно.
Пример: https://github.com/ccoenraets/wine-cellar-php
… из этой статьи:
http://coenraets.org/blog/2011/12/restful-services-with-jquery-php-and-the-slim-framework/
… хорошо, потому что он инкапсулирует настроенный сервер RESTful PHP (Slim). С точки зрения работы с backbone.js, это, по-видимому, является целым, что вам нужно на стороне сервера – просто служба RESTful!
Для моей базовой веб-конфигурации (не очень хорошо с правилами перезаписи) мне пришлось изменить файл ../final/js/models/winemodel.js (где я добавляю index.php ) следующим образом:
url:"../api/index.php/wines"