10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-17

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?