
CakePHP2.3.Xでエクセルファイルなどをダウンロードさせる方法。
2013/09/04
前回のポストでエクセルファイルを動的に作成しましたが、その作成したファイルをダウンロードさせる方法も忘備録としてポストです。
メディアビュー(MediaView)を使うとあっさりと実現可能でした。
「メディアビュー」を使う
EC系サイトでしたら売上や顧客一覧をエクセルファイルでダウンロードさせたいという場合があると思います。
その時に役に立つ方法です。
[php]
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);
}
[/php]
以上で完成です。
$params['path']に設定するパスがちょっと難儀。
フルパスでも良いような気がするのですが、なぜか動かなかったので、相対パスで設定してみました。
[tgAmazonItemLookup asin="B009C73BSA" related="1"]