ZendFremeworkでCSVファイル出力

2月 5th, 2009 by Fou Leave a reply »

超ひさびさの更新です。

ダウンロードボタンを押すと、DBからCSVファイルにして出力するメモ。

単独phpでechoでもすればさほどでもないけど、ZendFremeworkで組んでいるとき、この出力phpファイルが本体とバラバラになるのを避けたかったのでフレームワーク内で組みたかった。

とはいえ、Zend_Controller_Actionだけを継承したCSV出力用の単独コントローラーをつくり、アクション内で解決する。
肝になるのはヘッダー情報の出力方法と、このコントローラーではレンダラー系を全て切って余計な出力が無いようにしておくことかな。

public function init(){}
public function preDispatch(){}
public function postDispatch(){}

まず、ファイル名を付けて、ダウンロードできるようにヘッダー情報を出力

$this->getResponse()
    ->setHeader('Content-disposition','attachment; filename="data_'.date('YmdHis').'.csv"' )
    ->setHeader('Content-type', 'test/x-csv')
    ->sendHeaders();

そしてSQLなんかで出力用の配列を作って、CSV用に整形するループ内でコンテンツ内容を保存していく

mb_convert_variables("SJIS","EUC-JP",$csv);
foreach($csv as $value){
   $this->getResponse()->appendBody( implode(',',$value)."\r\n" );
}
$this->getResponse()->outputBody();
Advertisement

コメントをどうぞ