[symfony]csvダウンロードを実装する
2009 年 5 月 3 日
コメントはありません
今回はCSVファイルをダウンロードさせる処理をメモ。
Symfony Tips:ファイルダウンロード処理の実装(IE×SSLの罠)によると、CSVファイルに限らずTEXTファイルなどをダウンロードさせる処理を実装する場合は、view.ymlに以下のような設定を追加するらしい。
例:downloadアクションでファイル名data.csvをダウンロードさせる場合
- downloadSuccess:
- http_metas:
- cache-control: public
- pragma: public
- content-type: application/octet-stream; name=data.csv
- content-disposition: attachment; filename=data.csv
なるほど確かにdownloadSuccess.phpが呼ばれると、ダウンロードが始まった。
しかし、実際にエクセルで見てみるとカンマで区切られずに、A1のセルに全部入ってる。
「なぜだー!?」と思い、terapadで開いてみると、
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- ・・・・・
- ・・・・・
という文字列が目に入った。
・・・・layout.phpを読みこんどる・・・・・・
ってなわけでview.ymlを以下のように修正した。
- downloadSuccess:
- http_metas:
- cache-control: public
- pragma: public
- content-type: application/octet-stream; name=data.csv
- content-disposition: attachment; filename=data.csv
- has_layout: off
こうすることによってlayoutが読み込まれなくなり、エクセルでもきちんと表示できた。
symfonyではデフォルトでuploadsディレクトリが定義されているが、downloadsディレクトリが定義されていない。
そういったとこからも、やはりダウンロードファイルはテンプレートで作れということなのだろう。

