CakePHP - 为我的CakePHP应用程序创建API

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格式的页面,这正是我期望的。
我认为我做错了什么或者我没有正确理解某些内容。实际上正在发生什么,请你帮帮我?
谢谢!
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
    }
}

我认为我开始理解CakePHP中的API的要点了。 我在我的函数中添加了if语句来检查扩展名,还在我的控制器中添加了组件。 但是我该如何处理JSON数据,以便例如创建用户? - Kostas Livieratos
1
你只需要像平常一样调用 $this->News->save($this->request->data),但是不要使用闪存消息进行重定向,而是将闪存消息分配给 _serialize 视图变量。 - Martin Bean
好的,再次感谢!我需要创建一个视图或者其他什么吗,还是就这样就可以了? - Kostas Livieratos
不需要。只要您为_serialize设置了某些内容,并且访问者请求的URL以**.json**结尾,那么CakePHP就会知道将_serialize的值作为JSON响应输出。 - Martin Bean
1
请尝试检查 app/tmp/logs/error.log 中的错误日志。在底部附近应该会有一个致命错误,这将是导致您的500内部服务器错误的原因。 - Martin Bean
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接