【问题标题】:A RESTful persistence solution usable with backbone.js... in PHP?一个 RESTful 持久性解决方案可用于 PHP 中的主干.js...?
【发布时间】:2011-08-10 22:28:05
【问题描述】:

我会先说我是一个蹩脚的程序员,我确信我想做的事情可以在 10 行节点或 Rails 或其他东西中完成,但 PHP 是我可用的。

所以,我希望找到一个简单的 PHP 库,它将数据库调用包装在一个类似于 RESTful 模型的 API 中。

我试图找到这样的东西几乎没有成功 - 搜索 PHP CRUDPHP REST 会出现数百万页,我不知道如何过滤它们。

我真的想在这里保持简单,我不想要 Zend 之类的大框架。我在 Backbone 中处理的模型非常简单。我只想将GETs 发送到/notes/3POSTs 到/notes 等,然后让PHP 对数据库执行正确的操作。

也许我要求的太多了,但在我看来,这正是 Rails 等其他框架所提供的。有什么建议? TIA...

【问题讨论】:

    标签: php json persistence crud backbone.js


    【解决方案1】:

    2018 年 11 月编辑:虽然我不会敲 CodeIgniter,但现在 Laravel(当前为 5.5)是我使用的框架。

    这里有一个good article 总结了我使用 Laravel 的原因。

    要开始使用,我推荐Laracasts。这是一项订阅视频教程服务,深入介绍了如何使用 Laravel(以及其他与 Web 开发相关的东西)。

    原始答案:

    Codeigniter,对我来说,是最简单的类似 Rails 的框架。它很简单,您可以轻松地从头开始构建 CRUD 应用程序。

    推出自己的应用程序的最大问题是安全性。 Codeigniter 可以通过保护您免受许多常见的安全风险(例如直接使用 $_POST 数组以及不正确过滤您的数据)来帮助您构建一个不易被黑客入侵的网站。更不用说它提供的许多帮助类,例如表单验证。

    您可以在他们的网站上查看documentation。只要您记住导航隐藏在每个页面的顶部,它就非常易于使用。 :D

    【讨论】:

    • +1 它比从头开始更安全,结构更好,但它比 Symfony、CakePHP、Yii 等限制更少。如果我的项目是基本的“一页一内容”类型的东西用一些简单的形式,然后我使用 CI。如果它更高级,我使用 Symfony 或 Yii。 CI 的一大缺点是缓存很差,而且很难在控制器之间重用操作。
    • 经过一番考虑,我认为 Code Igniter 非常接近我的需要。一方面,那里有大量的文档(codeigniter.com/wiki/Tutorials),还有看起来很不错的 REST 插件:github.com/philsturgeon/codeigniter-restserver。感谢大家发帖。
    【解决方案2】:

    您了解 CRUD 在内部是如何工作的吗?从 PHP 的角度来看,它可以像在每个 REST 调用可能性上使用 switch 语句一样简单。

    在此处查看此页面: http://www.codethinked.com/building-epic-win-with-backbone-js

    跳到标题为“将其连接到服务器”的部分。

    您的 PHP 脚本只需满足这些要求。

    一个简单的原型代码:

    switch($_SERVER['REQUEST_METHOD']){
        case 'POST':
            // create new item
            break;
        case 'GET':
            // get item(s)
            break;
        case 'PUT':
            // update item
            break;
        case 'DELETE':
            // delete item
            break;
    }
    

    您还需要按如下方式设置.htaccess 文件(以处理访问不存在的网址):

    # Turn on rewrite engine and redirect broken requests to index
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-l
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule .* index.php [L,QSA]
    </IfModule>
    

    http://mysite.com/1 这样的 URL 并不存在,这就是您需要路由的原因。

    编辑:如果您打算在 HTML 表单中使用 PUT 或 DELETE,请忘记它。在撰写本文时,它还没有被 HTML5 接受,而且几乎所有的浏览器都不支持它。我对此的“修复”是使用GET 处理GET 请求,使用POST 处理所有其余请求(POST 本身、PUTDELETE)。示例:

    <form action="POST" action="/users/5">
        <input type="hidden" name="method" value="DELETE"/>
        <button>Delete User #5</button>
    </form>
    

    然而,这不是 AJAX 的问题,因为显然您可以将 XMLHttpRequest 方法设置为您想要的任何东西而不会出现问题。

    【讨论】:

    • 感谢您的建议,这很有帮助,但不是我想要的。您链接的帖子中的后端示例在 ASP.net 中,而不是我要求的 PHP。此外,我了解 RESTful 服务的基本思想:每个 HTTP 动词都需要映射到修改数据库的代码。但是我在这里看到的内容向我表明,我必须为每个 HTTP 动词编写(比如说)单独的 PDO 语句、SQL 等。没有任何库可以为 PHP 中的这类事情提供 API 吗?
    • @pat - 关于我链接到的帖子,那是为了演示动词的作用,而不是作为示例代码。如果您以“完美解决方案是 XYZ”的形式执行我的回答,请不要使用它。我正在向你展示它是如何工作的,这样你就可以自己做。鉴于我上面的示例代码,很容易让它工作。根本不需要任何框架来运行这个东西。
    • 很抱歉你似乎被我的回复冒犯了,克里斯蒂安。感谢您的建议。
    • @pat - 我需要向自己道歉,对反应过度感到抱歉。也就是说,您最初提出的问题和您在上述评论中提出的问题存在很大差异。首先,您提到可以自己从头开始。其次,你问如何处理动词(这是我回答的)。
    • 只想对从谷歌来到这里的人发表评论。 PUT 和 DELETE 的情况可以实现为每当您尝试保存现有模型时 Backbone 发送 PUT。
    【解决方案3】:

    有很多用于 PHP 的 restfull 框架,看看 herehere

    我个人喜欢fat-free-framework,但您需要 PHP 5.3。 还有很多对Tonic 的支持,Recess 似乎很有趣。

    此外,所有标准框架都具有某种形式的 rest 支持(zend、code igniter、symfony 等)

    你应该找到适合自己的 ..

    此外,如果您已经准备好 mysql 查询,您可以像这样将 mysql 结果直接转换为 json:

    function recordSetToJson($mysql_result) {
     $rs = array();
     while($rs[] = mysql_fetch_assoc($mysql_result)) {
        // you don´t really need to do anything here.
      }
     return json_encode($rs);
    }
    

    之后,与 url 关联起来就很容易了..

    发件人:Convert MySQL record set to JSON string in PHP

    【讨论】:

    【解决方案4】:

    您可以使用 silex https://github.com/fabpot/Silex 一个基于 symphony 2 的简单框架。使用 Silex,您可以轻松地路由和映射动作。

    您可以访问基本的 CRUD 元素,并且可以使用 URL 组件调用函数。

    文档中有一些示例: http://silex-project.org/doc/usage.html

    【讨论】:

      【解决方案5】:

      【讨论】:

        【解决方案6】:

        你可能想看看 Slim:

        http://www.slimframework.com/

        它绝对是轻量级的,可以为您提供您正在寻找的东西,一个易于部署的带有 php 的 RESTful 后端。

        【讨论】:

          猜你喜欢
          • 2010-09-25
          • 2015-05-22
          • 2012-03-31
          • 1970-01-01
          • 2017-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多