Простой пример кода 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"