cakephp-csvview をインストール
すでに composer で利用可能なパッケージ cakephp-csvview というものが存在する。
しかし、 普通にインストールして利用したのではマルチバイト文字のエンコーディング変換ができない。
(内部で iconv
を利用しているため)
実はマルチバイト対応の変更が master ブランチにマージ されており、
composer require friendsofcake/cakephp-csvview:dev-master
とすれば利用可能。
※ 2016/07/17 現在、タグはつけられていない
※ dev-master 指定は master ブランチに変更がある度に中身が変わってしまうので注意
※ 2016/08/19 追記
どうやらこの記事を書いたすぐあとにタグが付けられ、普通に利用可能になった模様。
利用のしかた
インストールしたあとは、基本的には README に従えばOK。
文字エンコーディングを指定した場合は、併せて _extention
変数に 'mbstring'
を指定してやる。
config/bootstrap.php(追記)
Plugin::load('CsvView');
src/Controller/任意のController.php
public function export($id = null)
{
// データを配列に整形 (本来はモデルにロジックを記述)
$data = [['ほげ', 'ふが', 'ぴよ']];
$_serialize = 'data';
// 文字コード変換の関数指定
$_extension = 'mbstring';
// 変換前の文字エンコーディング
$_dataEncoding = 'UTF-8';
// 出力文字エンコーディング
$_csvEncoding = 'sjis-win';
$this->viewBuilder()->className('CsvView.Csv');
$this->set(compact('data', '_serialize', '_extension', '_dataEncoding', '_csvEncoding'));
}