Edited at

CakePHP3 で CSVエクスポート機能(マルチバイト文字対応)

More than 3 years have passed since last update.


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