ヘルパーを使う方法もあるようですが、もっと単純な方法で実装をしてみました。拡張子指定によって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の参考書には下記があります。