[CakePHP2]いろいろな場所でviewのレンダリング結果を取得したい

Shellでのメール送信やajax通信などでHTMLを渡す場合などでレンダリング結果を使いたい場合、viewを使うと便利です。

こんな感じでレンダリング結果が取得できます。

$_view = new View();
$_view->viewPath = 'Emails'; //コントローラー部の名前に相当
$_view->viewVars = array('hoge'=>$hoge); //$this->set()に相当
$mailbody = $_view->render('text/hoge',"",null);  //今回はメールの例なので Emails/text/hoge.ctp がレイアウト

ですが、なぜかループでrender()メソッドを複数回呼ぶと2回目以降レンダリング結果がNULLになってしまいました。
深く追跡していないですが、通常はレンダリングは1回しか呼ばれないので複数回呼ばれることは考慮されていないものと思われます。

ということで、以下のように

while(...){
・・・
$_view = new View();
$_view->viewPath = 'Emails'; //コントローラー部の名前に相当
$_view->viewVars = array('hoge'=>$hoge); //$this->set()に相当
$mailbody = $_view->render('text/hoge',"",null);  //今回はメールの例なので Emails/text/hoge.ctp がレイアウト
}

毎回インスタンスを生成しなおしてあげる必要があるようです。
まぁ、前の設定情報が残っちゃったりすると事ですので、このほうが安全ですね。

タイトルとURLをコピーしました