Zend_Layoutでツーステップビューパターン
http://framework.zend.com/manual/ja/zend.layout.html
こちらの、マニュアルにある通り、Zend Frameworkでレイアウトを利用する場合、Zend_Layoutが一通りの機能を提供してくれている。
なければ困る機能ではないが、レイアウトと個別ビューが別レイヤーになることを前提としておくと、
メンバー間のコンセンサスを作りやすい。
レイアウトスクリプトのシンプルな例としては、こんな感じ
<?php echo $this->doctype() , PHP_EOL ; ?> <html <?php echo ($this->doctype()->isXhtml()) ? 'xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja_JP"' : '' ; ?>> <head> <?php echo $this->headTitle() , PHP_EOL ; ?> <?php echo $this->headMeta() , PHP_EOL ; ?> <?php echo $this->headLink() , PHP_EOL ; ?> <?php echo $this->headStyle() , PHP_EOL ; ?> <?php echo $this->headScript() , PHP_EOL ; ?> <?php echo $this->placeholder('head') , PHP_EOL ; ?> </head> <body> <?php echo $this->layout()->content ; ?> <?php echo $this->inlineScript() ; ?> </body> </html>
デフォルトのディレクトリ構成にしてあれば、対応するビューのレンダリング後、レイアウトに投入されて出力される。
まずは簡単。
Zend_Layoutのソースを見ると、デフォルトと違うキーで紛らわしいことをするとちょっとバグりそうな実装になってるから、この辺はおとなしく、カスタマイズしないでキーはcontentという風にしてしまった方が無難。
ホントにバグるかどうかは未確認。
通常のViewRendererとZend_Layoutの絡みとしては、Zend_Layout付属のプラグインがインデックス99でpostDispatchで実行され、そこまでにプールされてきたコンテンツがレイアウトオブジェクトに格納され、レイアウトスクリプトのキーで取り出される。
そのデフォルトが$this->layout()->content、というわけだ。