CakePHP2.3.Xでエクセルファイルなどをダウンロードさせる方法。
2013/09/04
前回のポストでエクセルファイルを動的に作成しましたが、その作成したファイルをダウンロードさせる方法も忘備録としてポストです。
メディアビュー(MediaView)を使うとあっさりと実現可能でした。
「メディアビュー」を使う
EC系サイトでしたら売上や顧客一覧をエクセルファイルでダウンロードさせたいという場合があると思います。
その時に役に立つ方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
function download() { // メディアビューを使用する $this->viewClass = 'Media'; // 出力ディレクトリ名 $output_dir = 'report'; // ファイル名(年月) $output_file_name = "REPORT" . "_" . date("YmdHis", time()); // 出力ファイル名.拡張子 $output_file_report = $output_file_name . ".xls"; // 出力パスを含む、ファイル名 $output_file_report_path = $output_dir . DS . $output_file_report; // 文字コード変換 $output_file_report = mb_convert_encoding($output_file_report, "SJIS", "UTF-8"); //------------------------------------------------------------ // // 前回のポストを参考に、エクセルファイルを作成(略) // //------------------------------------------------------------ // ファイルをダウンロードさせる $params = array( 'id' => $output_file_report, // 出力ファイル名.拡張子 'name' => $output_file_name, // ファイル名(年月) 'download' => true, 'extension' => 'xls', 'path' => '../../public_html/' . $output_dir . DS, // appディレクトリからの相対パス ); $this->set($params); } |
以上で完成です。
$params['path']に設定するパスがちょっと難儀。
フルパスでも良いような気がするのですが、なぜか動かなかったので、相対パスで設定してみました。
[tgAmazonItemLookup asin="B009C73BSA" related="1"]