
CakePHP2.4以降(2.6.x)でファイルをダウンロードする方法
2017/12/09
CakePHP2.6でPHPExcelを使い、データベースのレコードをエクセルファイルとしてダウンロードしようとすると、CakePHP2.3まで使えていた方法(メディアビュー)が使えなくなっていました。
ちょっと戸惑ったので、備忘録としてポストします。
CakePHP2.3まで
メディアビューを使えるのは2.3.xまで
CakePHP2.3でファイルダウンロードする場合は、メディアビューというのを使います。
以下を参照。
http://book.cakephp.org/2.0/ja/views/media-view.html
[php]
Configure::write('debug', 0); // デバッグをOFFとする
$this->layout = false; // レイアウトを使わない
$this->view = 'Media'; // メディアビューを使用する
// ファイルをダウンロードさせる
$params = array(
'id' => 'example.xls', // 出力ファイル名.拡張子
'name' => 'example', // 拡張子は無く、"出力ファイル名だけ"指定
'download' => true,
'extension' => 'xls',
'path' => WWW_ROOT . 'output_dir' . DS, // フルパス or APPディレクトリからの相対パス
);
$this->set($params);
[/php]
CakePHP2.4以降
CakeResponse::download を使用する
cakephp 2.X MediaView がバージョン 2.3 で撤廃となっているので、2.4 以降は次の CakeResponse::download を使用します。
以下を参照。
http://book.cakephp.org/2.0/ja/controllers/request-response.html#cake-response-file
[php]
Configure::write('debug', 0); // デバッグをOFFとする
$this->autoRender = false; // オートレンダー(ビュー)を使わない
$this->response->file(WWW_ROOT . 'output_dir' . DS . 'example.xls'); // フルパス or APP/webroot からの相対パス
$this->response->download('example.zip'); // 出力ファイル名.拡張子
[/php]
出力ファイルのパスをしっかりと合わせることに注意して作成のこと。