ヘルパーを使う方法もあるようですが、もっと単純な方法で実装をしてみました。拡張子指定によってViewを切り替えたいといった要望がない場合はこれで十分でしょう。
InfoController.phpを用意してあり、http://example.jp/app/info/ でアクセスできるように設定してあるとします。下記のようにlist_all_csv()メソッドを追加します。こうすると、http://example.jp/app/info/list_all_tsv へアクセスするとTSVファイルのダウンロードができます。CSVファイルにしたい場合は、 “\t” を “,” に直せばいいでしょう。また、ヘッダーがいらない場合は、$list[0]に関しての処理を省略します。
public function list_all_tsv() { $tsv_file_name = 'info.tsv'; $response_type = 'comma-separated-values'; $this->autoRender = false; $this->response->type($response_type); $this->response->download($tsv_file_name); $list = $this->Info->find('all'); //Debugger::log($list); $content = ""; $list_size = count($list); $info = $list[0]['Info']; foreach (array_keys($info) as $info_key) { $a = $info_key; $content .= $a . "\t"; } $content .= "\n"; for ($i = 0; $i < $list_size; $i++) { $info = $list[$i]['Info']; foreach (array_keys($info) as $info_key) { $a = $info[$info_key]; $content .= $a . "\t"; } $content .= "\n"; } $this->response->body($content); }
CakePHP2の参考書には下記があります。