Json没有弹出cakephp 2.3中的下载文件

时间:2013-05-25 19:57:22

标签: cakephp cakephp-2.0

我正在使用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"}}} 

此输出正确但应以下载文件格式提供。我不知道这里有什么问题。

1 个答案:

答案 0 :(得分:0)

如果您尝试强制下载,则您的代码必须使用Response对象。

以下是CsvExport Behavior

的示例
   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');
    }

希望这有帮助!