CakePHP 1.1 - 如何在JSON中响应

时间:2012-04-29 11:23:38

标签: php cakephp

我正在使用PHP cake 1.1开发API。我想把响应写成JSON。我发现PHP Cake 1.2或1.3有很多内容,但1.1不是。

这是我的控制器代码

function index() {
   $this->layout = 'ajax';
   $this->RequestHandler->setContent('json', 'application/json');
   $members['id'] = '001100';        
   $this->set(compact('members'));    
}

这是视图代码

echo json_encode($members);

我的问题是,响应内容类型仍为Content-Type: text/html

有没有办法让我不必为每个函数创建视图,只需编写json

请帮帮我。

谢谢, 阿迪尔

3 个答案:

答案 0 :(得分:1)

在CakePHP 1.2中,如果将autoRender设置为false并从控制器操作返回一个值,它将直接输出。您可能需要特定内容类型。

function index() {
    $this->autoRender = false;
    $this->RequestHandler->respondAs('json'); // or $this->RequestHandler->respondAs('application/json'); if json is not set up with CakePHP 1.1
    $members['id'] = '001100';        
    return json_encode($members);    
}

我没有立即访问CakePHP 1.1代码库,因此您可能需要检查dispatcher.php,特别是_invoke()方法,以确保操作的返回是echo,如果autoRender设置为false。

我强烈建议升级到CakePHP 2.1,它包含一个可用于提供json响应的JsonView。

function index() {
    $this->view = 'Json';
    $members['id'] = '001100';
    $this->set(compact('members'));        
    $this->set('_serialize', array('members'));    
}

答案 1 :(得分:0)

我不确定我是否理解100%的问题,但如果您只是想在JSON字符串中输出内容,请查看此链接:

http://techno-geeks.org/2009/08/easy-json-with-cakephp-and-jquery/

答案 2 :(得分:0)

试试这个:

function index() {
   $this->autoRender = false;
   /**
     * leave this two lines
     *
     * $this->layout = 'ajax';  // leave it
     * $this->RequestHandler->setContent('json', 'application/json'); 
     *
     */

   // your process to get $members
   $members['id'] = '001100';        
   $this->set('members');    
}

因为您的观看代码很好。