Zend_Layoutのメソッド
ここまででZend_Layoutを利用するための基本は押さえたので、ここからはZend_Layoutのメソッドをいくつか紹介したいと思います。
レイアウトの指定
サンプルで見たように、Zend_Layoutは標準ではレイアウトスクリプトとして「layout.phtml」を利用していました。しかし、例えばエラーが起きたときなど、標準とは異なるレイアウトを利用して描画を行いたい場合があるかもしれません。そのようなときにはsetLayoutメソッドを利用します。
| メソッド名 | 引数 | 説明 |
| setLayoutPath | $path | レイアウトスクリプトを置く場所$pathの指定。標準ではビュースクリプトと同じ場所。 |
| getLayoutPath | (なし) | レイアウトスクリプトが置いてある場所を取得。 |
| setLayout | $name | 利用するレイアウトの名前$nameを指定。標準では「layout」。 |
| getLayout | (なし) | 利用するレイアウトの名前$nameを取得。 |
| setViewSuffix | $viewSuffix | 利用するレイアウトのファイルの拡張子を指定する。標準では「.phtml」。 |
| getViewSuffix | (なし) | 利用するレイアウトのファイルの拡張子を取得。 |
「layout」の代わりに「table」という名前のレイアウトスクリプトを利用したい場合にはリスト8のようにsetLayoutメソッドを使います。
...
class IndexController extends Zend_Controller_Action
{
...
public function tableAction()
{
//レイアウトスクリプトにtable.phtmlを使う
$this->_helper->layout->setLayout('table');
//ビュースクリプトは index.phtmlをそのまま利用する
$this->render('index');
}
...
ここでtable.phtmlの内容がリスト9のようだったとします。
<html> <head> <title>Zend Layout Test</title> </head> <body> <table border=1> <tr> <td><?php echo $this->layout()->menu ?></td> <td><?php echo $this->layout()->content ?></td> </tr> </body> </html>
サンプルではスタイルシートでmenuと本文を配置していたのに対し、リスト9では<table>タグを利用してmenuと本文を配置しています。これを描画した結果は図5のようになります。

図2と違い、図5ではテーブルが利用されています。
Zend_Layoutのメンバ変数の操作
リスト4やリスト5で見たように、レイアウトスクリプトで利用する変数はZend_Layoutのassignメソッドで設定することができます。これ以外にもZend_Layoutのメンバ変数を設定したり参照したりするメソッドとして、次のものが準備されています。
| メソッド名 | 引数 | 説明 |
| __set | $key, $value | Zend_Layoutのメンバ変数$keyの値を$valueに設定する。 |
| __get | $key | Zend_Layoutのメンバ変数$keyの値を取得する。 |
| __isset | $key | Zend_Layoutにメンバ変数$keyがあるかを調べる。 |
| __unset | $key | Zend_Layoutのメンバ変数$keyを削除する。 |
| assign | $spec, $value = null | Zend_Layoutのメンバ変数の値を設定する。$specが配列の場合には$specの各要素をについて変数を設定する。それ以外の場合には、$specの名前のメンバ変数の値を$valueにする。 |
assignメソッドについては与えられた引数によって挙動が変化します。$specが配列だった場合には$specの各要素について、「要素の鍵」の名前を持つメンバ変数の値を「要素の値」に設定します(リスト10)。
// 配列を使った場合
$layout->assign(array('a'=>'1', 'b'=>'2', 'c'=>'3');
// これは次と同じ意味
$layout->assign('a', '1');
$layout->assign('b', '2');
$layout->assign('c', '3');
