我正在使用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
。
请帮帮我。
谢谢, 阿迪尔
答案 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');
}
因为您的观看代码很好。