Backbone.js 如何与 PHP 一起使用

Posted

技术标签:

【中文标题】Backbone.js 如何与 PHP 一起使用【英文标题】:Backbone.js How to use with PHP 【发布时间】:2011-09-06 15:06:06 【问题描述】:

我一直在研究backbone.js,但我似乎无法弄清楚如何让它与php 通信以保存模型数据。它发送一个请求,但我如何捕获该请求,无论它是“创建”、“更新”、“读取”、“删除”等。

谢谢

【问题讨论】:

我从来没有这样做过,我该怎么做呢? Ask these guys 【参考方案1】:

backbone.js 的模型使用特定的 url 来获取和发送数据。您必须确保在那里调用了一个 php 脚本。

现在有两种可能。

首先,该方法作为附加变量在 $_POST 内发送。 其次,您必须寻找使用的请求方法(GET,POST,PUT,DELETE),您可以使用$_SERVER['REQUEST_METHOD']

现在您可以使用简单的 if-else 或 switch 语句来处理请求并按照我认为的 json 传递所需的数据。

【讨论】:

好的,现在从 Backbone.js API 来看,它看起来像使用 ajax 请求发送的数据,这是一个字符串化模型。我如何获得这些信息? $_SERVER['model'] 或类似的东西? 或者我想我的问题是如何访问使用 Backbone 保存的模型的数据?或者它甚至可以通过 Ajax 请求传递? 我能够使用$GLOBALS['HTTP_RAW_POST_DATA'] 获得 JSON 编码的模型字符串,这样做是否安全? 最好做 $rawPost = file_get_contents("php://input");见us.php.net/manual/en/wrappers.php.php 你有什么理由制作你的回答社区维基吗?你知道你不会从赞成票中获得代表吗?要我撤消此操作吗?【参考方案2】:

$GLOBALS['HTTP_RAW_POST_DATA'] 对我来说很好用,我不知道 print_r($_POST) 为什么不打印任何东西!!

【讨论】:

是的,我注意到 ` print_r($_POST) ` 没有做任何事情,我发现 $GLOBALS['HTTP_RAW_POST_DATA'] 包含我需要的内容 我在看这个链接***.com/questions/5755074/…,但我不明白。【参考方案3】:

您可能会考虑的另一个选择是使用预打包的 RESTful 框架,该框架内置了执行 Backbone 服务器查询所需的所有必要功能。我个人最喜欢的是Josh Lockhart's SlimPHP Framework。

用于进行 Backbone 调用的一些简单示例代码(一旦您安装了 SlimPHP)如下所示。

$app->get('/user', function() use ($app) 

    // See if session is set, get user info as array
    if (isset($_SESSION['userID']) 
         $user = // grab user with userID data from DB
    

    // Respond to the get request with a json object
    $response = $app->response;
    $response['Content-Type'] = 'application/json';
    $response->body(json_encode($user));

这是一个将 Backbone json 转换为数组的 POST 示例。

// Middleware that detects type of data and converts it to something usable
$app->add('Slim_Middleware_ContentTypes');    // JSON to associative array

...

$app->post('/message', function() use ($app) 
    $dataIn = $app->request()->getBody();

    ...

    // Save to DB $dataIn['message'], $dataIn['author'], etc.

这是一个使用一些参数的 PUT 示例。

$app->put('/user/:id', function($id) use ($app) 

    // Find appropriate user from DB that has $id as ID

    $dataIn = $app->request()->getBody();

    // Save to DB $dataIn['name'], $dataIn['age'], etc.

这里是删除。

$app->delete('/message/:id', function($id) use ($app) 

    // Find appropriate message from DB that has $id as ID

    // Delete message with id of $id

虽然这不是所有其他要考虑的事项的详尽示例,但它应该让您了解已经有哪些开放式解决方案可供您使用。我个人喜欢 Slim,因为它非常轻量、简单,但它具有您在 RESTful 服务器中想要的所有功能。非常适合原型制作。将它与数据库抽象层和其他一些工具结合起来,您可以更快地制作任何您想要的东西。

您可以在此处查看其他一些示例代码:

    How to post Backbone model to server Ways to save Backbone data

这里是其他一些基于 PHP 的 RESTful 解决方案的链接:Framework List

【讨论】:

【参考方案4】:

在您的 php 脚本中,您将拥有 PUT 和 DELETE 方法,因为您可以使用以下内容过滤它们:$_SERVER['REQUEST_METHOD']

parse_str(file_get_contents("php://input"),$post_vars);

如果请求是 POST 或 GET,您可以正常使用它,但如果请求是 PUT 或 DELETE,请使用上面的行,这样您就可以通过以下方式访问变量:

$post_vars['fruit'] for example...

当您准备好回复主干时,您只需首先制作正确的标题:

header('Content-type: application/json; charset=utf-8');

并用 json 编码你的答案:

echo json_encode(array("message"=>"missing fields","status"=>200));

【讨论】:

以上是关于Backbone.js 如何与 PHP 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将backbone.js 与websockets/socket-io/nowjs 一起使用

如何通过javascript执行php

将 JSON 提要与 Backbone JS 集成

渲染 Backbone.js 集合

Backbone.js 和 DOM 操作

结合d3.js和backbone.js