アーカイブ

‘csv’ タグのついている投稿

[symfony]csvダウンロードを実装する

2009 年 5 月 3 日 コメントはありません

今回はCSVファイルをダウンロードさせる処理をメモ。

Symfony Tips:ファイルダウンロード処理の実装(IE×SSLの罠)によると、CSVファイルに限らずTEXTファイルなどをダウンロードさせる処理を実装する場合は、view.ymlに以下のような設定を追加するらしい。
例:downloadアクションでファイル名data.csvをダウンロードさせる場合

  1.  downloadSuccess:
  2.    http_metas:
  3.      cache-control: public
  4.      pragma: public
  5.      content-type: application/octet-stream; name=data.csv
  6.      content-disposition: attachment; filename=data.csv

なるほど確かにdownloadSuccess.phpが呼ばれると、ダウンロードが始まった。
しかし、実際にエクセルで見てみるとカンマで区切られずに、A1のセルに全部入ってる。

「なぜだー!?」と思い、terapadで開いてみると、

  1.  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  ・・・・・
  3.  ・・・・・

という文字列が目に入った。

・・・・layout.phpを読みこんどる・・・・・・

ってなわけでview.ymlを以下のように修正した。

  1.  downloadSuccess:
  2.    http_metas:
  3.      cache-control: public
  4.      pragma: public
  5.      content-type: application/octet-stream; name=data.csv
  6.      content-disposition: attachment; filename=data.csv
  7.    has_layout: off

こうすることによってlayoutが読み込まれなくなり、エクセルでもきちんと表示できた。

symfonyではデフォルトでuploadsディレクトリが定義されているが、downloadsディレクトリが定義されていない。
そういったとこからも、やはりダウンロードファイルはテンプレートで作れということなのだろう。

カテゴリー: symfony タグ: ,
Get Adobe Flash player