【问题标题】:simple PHP code sample to serve backbone.js为backbone.js 提供服务的简单PHP 代码示例
【发布时间】:2011-06-08 17:54:34
【问题描述】:

经验水平:新手。

backbone.js Todos demo 使用本地存储。这个问题是关于如何使用 PHP 来服务页面,假设已经设置了一个 MySQL 数据库。

我查看了诸如 CodeIgniter 之类的 PHP 框架,但发现它们很难遵循,并且可能对我的学习目的来说太过分了。

我理解需要设置 REST API 的概念。我真的在寻找简单的代码示例。提前致谢。

更新:某处是否有完整的bone.js 教程,其中包括如何连接到服务器端 PHP 的完整工作示例?

【问题讨论】:

  • 如果您从未做过任何 PHP,您可能希望使用 node.jsexpress 为您公开一个 REST api。您也可以只设置一个沙发数据库,​​它会自动公开一个 REST api 来进行数据访问,而不是 mySQL。
  • 感谢 Raynos 的建议,我会调查一下。在不详细说明我的情况以及出于此问题的目的的情况下,假设有使用 PHP 的特定要求。
  • 你可以看看这个问题:stackoverflow.com/questions/5755074/…
  • 谢谢我之前做过,它指向了一些不同的框架,例如 CI,但我发现它们很难遵循。

标签: php backbone.js


【解决方案1】:

应该可以帮助您入门的最基本和最简单的方法(我知道)是:

  1. 假设您有一个模型/集合,请使用以下网址定义它:

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

  2. 创建您的 page.php 文件(在文档根目录中),只需注意您可能使用的 RewriteRules 等!

  3. 现在我们必须确保我们能够对 get、put、post 和 delete 做出正确的反应;所以我们必须检查请求方法,例如带有 switch 语句。案例将是 GET、DELETE、PUT、POST:

    switch($_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",
    
        ...
    });
    

    最近,我写了一篇关于如何使用 Backbone.js 和 PHP http://cambridgesoftware.co.uk/blog/item/59-backbonejs-%20-php-with-silex-microframework-%20-mysql 进行 GET/POST/PUT/DELETE 的教程,可能会有所帮助。

    【讨论】:

      【解决方案3】:

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

      ...来自这篇文章:

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

      ... 很好,因为它封装了已配置的 PHP RESTful 服务器(Slim)。从使用backbone.js 的角度来看,这似乎基本上就是您在服务器端所需要的全部内容——只是一个RESTful 服务!

      对于我的基本网络配置(不擅长重写规则),我不得不修改文件 ../final/js/models/winemodel.js(我在其中添加 index.php em>) 如下:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        • 2011-04-25
        • 1970-01-01
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多