CakePHPのビューを変数に格納する。

メールの本文をビューを使って生成したときがあります。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()とか内部のメソッドを呼んでいるが、もっとよい方法があるのだろうか?