2

Cakephp 2.3 を使用しており、ユーザーのリストを json 形式で生成したいと考えています。

コントローラー名: ユーザー メソッド: リスト

以前、私は Cake 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.ctp

<?php echo $scripts_for_layout; ?>
<?php echo $this->fetch('content'); ?>

ブラウザで自分の関数にアクセスしようとすると、この出力が得られます

url: http://localhost/project/users/list

{"posts":{"id":{"name":"aditya"}}} 

この出力は正しいですが、ダウンロード ファイル形式である必要があります。ここで何が問題なのかわかりません。

4

1 に答える 1

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

お役に立てれば!

于 2013-05-26T18:35:11.237 に答える