2011-06-08 52 views
14

經驗水平:新手。簡單的PHP代碼示例服務backbone.js

backbone.js Todos demo使用localStorage。這個問題是關於如何使用PHP來爲頁面提供服務,假設已經建立了MySQL數據庫。

我檢查了PHP框架CodeIgniter,但發現它們難以遵循,並可能爲我的學習目的矯枉過正。

我理解REST API需要設置的概念。我真的在尋找簡單的代碼示例。提前致謝。

更新:是否有一個完整的backbone.js教程,其中包含一個完整的如何連接到服務器端PHP的工作示例?

+0

如果你從來沒有做過任何PHP,你可能想看看使用'node.js'和['express'](http://expressjs.com/)爲你公開一個REST api 。你也可以設置一個沙發數據庫,​​它自動公開一個REST API來訪問數據,而不是使用mySQL。 – Raynos 2011-06-08 18:16:54

+0

謝謝雷諾斯的建議,我會研究它。沒有深入瞭解我的情況以及針對這個問題的目的,我們的假設是有一個特定的要求是使用PHP。 – fortuneRice 2011-06-08 18:47:21

+0

你可以看看這個問題:http://stackoverflow.com/questions/5755074/a-restful-persistence-solution-usable-with-backbone-js-in-php/5965699#5965699 – Charles 2011-06-10 13:02:19

回答

8

最基本,最簡單的方法(我知道)這應該可以幫助您上手,應該是:

  1. 假設你有一個模型/集合,就像一個網址定義它

    resourceCollection:Backbone.Collection.extend({ 網址: '/page.php' })

  2. 創建page.php文件文件(在文檔根目錄中),只需照顧RewriteRules等等,您可以使用!

  3. 現在我們必須確保我們能夠正確地對get,put,post和delete進行反應;所以我們必須檢查請求方法,例如用switch語句。案件將是GET,DELETE,PUT,POST:

    開關($ _ SERVER [ 'REQUEST_METHOD']){ ... }

+0

感謝您的幫助。 – fortuneRice 2011-06-14 23:03:27

4

下應該給你一個想法(PHP控制器採用的Silex框架+巴黎庫,用於數據訪問)來實現:

// 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/Backbone.js的用PHP和DELETE http://cambridgesoftware.co.uk/blog/item/59-backbonejs-%20-php-with-silex-microframework-%20-mysql教程,可能會有所幫助。

0

的例子: https://github.com/ccoenraets/wine-cellar-php

...從這篇文章:

http://coenraets.org/blog/2011/12/restful-services-with-jquery-php-and-the-slim-framework/

...是好事,因爲它封裝了一個配置PHP的RESTful服務器(超薄)。從與backbone.js一起工作的角度來看,這似乎基本上是您在服務器端所需的全部內容 - 只需一個RESTful服務!

對於我的基本的web配置(我不是重寫規則好),我不得不修改文件../final/js/models/winemodel.js(在這裏我補充的index.php)如下:

url:"../api/index.php/wines"