我正在使用cakephp 2.3并希望以json格式生成用户列表。
控制器名称:用户 方法:列表
早些时候,我已经在蛋糕1.3.x中完成了它,当用户在浏览器中通过url尝试访问方法然后输出作为下载文件但是当我在cakephp 2.3中执行它然后它在浏览器页面上显示我的json输出而不是下载文件。
这是我的代码:
控制器:
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public $helpers = array('Form', 'Html', 'Js', 'Time');
public $components = array('RequestHandler');
var $layout = 'js/default';
public function list() {
$this->log("i got data in user add:");
$this->log($this->request->data);
$posts['id']['name']='kapil';
$this->set(compact('posts'));
}
}
list.ctp文件
<?php echo json_encode(compact('posts')); ?>
查看/ JS / default.thtml中
<?php echo $scripts_for_layout; ?>
<?php echo $this->fetch('content'); ?>
当我尝试在浏览器中访问我的功能时,我得到了这个输出
url: http://localhost/project/users/list
{"posts":{"id":{"name":"aditya"}}}
此输出正确但应以下载文件格式提供。我不知道这里有什么问题。
答案 0 :(得分:0)
如果您尝试强制下载,则您的代码必须使用Response对象。
的示例 public function export() {
$this->autoRender = false;
$modelClass = $this->modelClass;
$this->response->type('Content-Type: text/csv');
$this->response->download( strtolower( Inflector::pluralize( $modelClass ) ) . '.csv' );
$this->response->body( $this->$modelClass->exportCSV() );
}
所以你的代码看起来像这样:
public function list() {
$this->autoRender = false;
$this->log("i got data in user add:");
$this->log($this->request->data);
$posts['id']['name']='kapil';
$this->set(compact('posts'));
$modelClass = $this->modelClass;
$this->response->type('Content-Type: application/json');
$this->response->download('list.json');
}
希望这有帮助!