Простой пример кода PHP для обслуживания backbone.js
Уровень опыта: новичок.
backbone.js Todos demo использует localStorage. Этот вопрос касается того, как использовать PHP для работы с этой страницей, предполагая, что был настроен DB MySQL.
Я проверил фреймворки PHP, такие как CodeIgniter, но обнаружил, что их трудно отслеживать и, возможно, перегружать для моих целей обучения.
Я понимаю концепцию создания REST API. Я действительно ищу простые образцы кода. Спасибо заранее.
Обновление: есть ли где-нибудь полный справочник backbone.js, который включает полный рабочий пример того, как подключиться к серверной стороне PHP?
Ответы
Ответ 1
Самый простой и простой подход (я знаю), который должен помочь вам начать, будет:
-
Учитывая, что у вас есть модель/коллекция, определите ее с помощью URL-адреса, например:
resourceCollection: Backbone.Collection.extend({ url: '/page.php' })
-
Создайте файл page.php (в корневом каталоге документа), просто позаботьтесь о RewriteRules и т.д. вы можете использовать!
-
Теперь мы должны убедиться, что мы можем правильно реагировать на получение, размещение, публикацию и удаление; поэтому мы должны проверить способ запроса, например. с оператором switch. Случаи будут GET, DELETE, PUT, POST:
переключатель ($_ SERVER [ 'REQUEST_METHOD']) { ...
}
Ответ 2
Следующее должно дать вам представление (php-контроллеры реализованы с использованием библиотеки Silex + 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, может быть полезно.
Ответ 3
Пример:
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"