メールの本文をビューを使って生成したときがあります。PHPのストリングで結合してなんてやりたくありません。後で修正が面倒。
CakePHPの1.3のときは、
$this->output_layout = 'mail';
// バッファリング開始
ob_start();
// Viewアクションでレンダリングする。
$this->render('mail_view');
// レンダリングした結果を取得する。
$html = ob_get_clean();
なんてob_start()とrender()でやっていたけど、CakePHPが2になってからrender()がレンダリング結果を返さなくなったようだ。
そこで、viewのソースファイルを読んで、次のように対応した。
// Viewアクションでレンダリングする。
$response = $this->render('mail_view', 'email');
// レンダリングした結果を取得する。
$html = $response->__toString();
なんだか__toString()とか内部のメソッドを呼んでいるが、もっとよい方法があるのだろうか?