CakePHP CSV出力機能(friendsofcake/cakephp-csvview)

インストール

Composerからライブラリインストール
# composer require friendsofcake/cakephp-csvview:~3.0

設定

※~/config/bootstrap.php
Plugin::load('CsvView');

コントローラ

直接出力

public function receiptDownload(){

 出力対象
 $receipts = $this->Receipt
  ->find()
  ->all();

 $_serialize = ['receipts'];

 ヘッダー(※省略可)
 $_header = ['Column 1', 'Column 2', 'Column 3'];

 フッター(※省略可)
 $_footer = ['件数:' . $receipts->count()];

 ファイル名(※省略可)
 $this->response->download('売上一覧.csv');

 CsvViewを利用
 $this->viewBuilder()->className('CsvView.Csv');

 設定値をプラグインへ引き渡し
 $this->set(compact('receipts', '_serialize', '_header', '_footer'));
}

テンプレート使用

public function receiptDownload(){

 出力対象
 $receipts = $this->Receipt
  ->find()
  ->all();

 $_serialize = null;

 ファイル名(※省略可)
 $this->response->download('売上一覧.csv');

 CsvViewを利用
 $this->viewBuilder()->className('CsvView.Csv');

 設定値をプラグインへ引き渡し
 $this->set(compact('receipts', '_serialize'));
}

\src\Template\(コントローラ名)\csv\receipt_download.ctp
<?php foreach ($receipts as $receipt): ?>
  列名、デミリタ(,)を指定
  <?php echo $receipt->id ?><?php echo ',' ?>
  <?php echo $receipt->col1 ?><?php echo ',' ?>
  <?php echo $receipt->col2 ?><?php echo ',' ?>
  JOINした場合の複層モデルを指定
  <?php echo $receipt->Model1['col'] ?><?php echo ',' ?>
  最終列には改行を指定
  <?php echo $receipt->Model2['col'] ?><?php echo 'PHP_EOL' ?>
<?php endforeach; ?>

ビジネス

次の記事

マネーの拳