PHP
Composer
cakephp3

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

More than 1 year has 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'));
}