LIGのメルマガ、はじめました!
LIGのメルマガ、はじめました!

CSVヘルパーを使ってみよう(CakePHPで)

まっちー

CSV(ャンピオンに必要なものれはヴィクトリー)をPHP側で出力しようとした場合、自分でfputcsvとかを使って頑張ってもいいのですが、文字列の処理が以外と面倒だったりすることもありますよね。上手くいったつもりでもいざファイルの中身を見てみたら列がずれちゃってたりとかもするし。

そこで役立つのがCSVヘルパー。チャンピオンになるための条件すなわちヴィクトリーをもたらしてくれる優秀な助っ人です。

使い方は簡単。ソースをコピペってcsv.phpとでも名前つけてhelpersに置くだけ。ソースはここから持って来ることができます。PHP5専用のを使ってもいいのですが、一応PHP4と互換のある方を使ってみましょう。まあ、どっちもやり方はたいして違いません。

ソースをコピーしたらあとはコントローラーとビューで以下のような処理をすればOKです。余分なソースは省略して書きまっする。

//コントローラー
class CsvController extends AppController {
    var $uses = array('User');
    var $helpers = array('Csv');

    function csv() {
        $data = $this->User->find('all');
        $this->set(compact('data'));
    }
}

//ビュー(csv.ctp)
addGrid($data,false);
$csv->setFilename('sample.csv');
echo $csv->render(true, 'SJIS', 'UTF-8');
?>

主に必要なのはこんだけです。

$csv->render()の第一引数をtrueにすると、ファイルをダウンロードできます。falseにすると、ブラウザ上にデータが出力されるだけになります。デフォルトはtrueになっています。

$csv->addGrid()の第二引数をtrueにすると、テーブルのカラム(たとえばusernameとかpasswordとか)も出力されます。正確には配列のキーになっている部分ですが、上記みたいにデータをセットすると、テーブルのカラム名がそのまま配列のキーになりますからね。必要なければfalseにしておくといいでしょう。デフォルトはtrueです。

CSVはExcelで見ることが多いと思うので、文字コードはSJISに変換しておいた方がいいような気がします。$csv->render()の第二引数、第三引数でその辺の設定もできます。

参考サイトはこちらです。

M o n g o