技術日記
Zend_Viewの仕様変更Edit

PHPプロ!マガジン Vol.2のZend Frameworkの記事に関して、以前読者の方から「テンプレートファイル内で別テンプレートをレンダリングするときには、<?php $this->render('path/to/template'); ?>じゃなくて、<?php echo $this->render('path/to/template'); ?>じゃないの?」という問い合わせがきたんだけど、そのときは手元のZend Framework Preview 0.2.0の実装を見て、

 通常のZend_View::render()では、結果を出力するためにecho文等が必要になりますが、テンプレートファイル内で$this->render()する際には、echoは不要となります。

 Zend_View_Abstract::render()の実装を見ると分かりますが、入れ子になったテンプレートのレンダリング処理では、出力内容は戻り値として返されません。

※子テンプレートのレンダリング結果は、親テンプレートと同一の出力バッファ(ob_*関数参照)に保存され、親テンプレートのレンダリング処理が終わった後に、まとめて結果として返されます

 出力バッファを利用した処理となっているので、

<?php echo $this->render('headerMenu.php') ?>

 と書いても特に問題はありませんが、echoを書く意味はありません(この場合のechoは「echo NULL;」相当になります)。

と答えたんだけど、Zend Framework Preview 0.6.0バージョンのZend_Viewを見たら、いつのまにかZend_View::render()メソッドは必ず結果を戻り値として返すようになっていて、テンプレート内から他のテンプレートを呼び出す際にもecho文が必須になっちゃっているよ!

というわけで、問い合わせをいただいた方&私の今まで書いたサンプルコードを見ていた方は、今後はテンプレート内で$this->render()する場合にも必ずechoする必要がありますんで、注意してください。

Published At2007-01-17 00:00Updated At2019-12-31 00:02