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; ?>