4

我创建了一个功能齐全的 CakePHP Web 应用程序。现在,我想让它更上一层楼,让我的应用更加“开放”。因此我想创建一个 RESTful API。在 CakePHP 文档中,我找到了这个链接 ( http://book.cakephp.org/2.0/en/development/rest.html ),它描述了使您的应用程序 RESTful 的方式。如链接顶部所述,我在 routes.php 中添加了所需的两行,现在我想对其进行测试。我有一个 UsersController.php 控制器,其中有一个函数 add(),它将新用户添加到数据库中。但是,当我尝试在 mydomain.com/users.json 下浏览(即使使用 HTTP POST)时,这会返回给我的网页,而不是我所期望的 json 格式的页面。

现在我认为我做错了什么或者我没有正确理解某些事情。到底发生了什么,你能帮我一下吗?

提前谢谢你!

4

1 回答 1

9

您需要解析 JSON 扩展。所以在你的routes.php文件中添加:

Router::parseExtensions('json');

因此,您现在可以访问http://example.com/news/index 之类的 URL,例如http://example.com/news/index.json

但是,要实际返回 JSON,您需要修改控制器方法。您需要_serialize在操作中设置一个键,因此您的新闻控制器可能如下所示:

<?php
class NewsController extends AppController {

    public function index() {
        $news = $this->paginate('News');
        $this->set('news', $news);
        $this->set('_serialize', array('news'));
    }
}

这就是基础。对于 POST 请求,您需要使用该RequestHandler组件。将其添加到您的控制器:

<?php
class NewsController extends AppController {

    public $components = array(
        'RequestHandler',
        ...
    );

然后您可以检查传入请求是否使用.json文件扩展名:

public function add() {
    if ($this->RequestHandler->extension == 'json') {
        // JSON request
    } else {
        // do things as normal
    }
}
于 2013-08-19T13:45:54.107 回答