Zend_Layout クイックスタートZend_Layout の使用法は大きくふたつに分けられます。 Zend Framework の MVC を使用する方法とそれ以外の方法です。 レイアウトスクリプトどちらにしても、まずはレイアウトスクリプトを作成しなければなりません。 レイアウトスクリプトは、単純に Zend_View (あるいはその他のあなたが使用しているビュー実装) を用いて作成します。 レイアウト変数の登録には Zend_Layout の プレースホルダ を使用します。プレースホルダへのアクセスは、 プレースホルダヘルパーを使用するか、 あるいはレイアウトヘルパーのレイアウトオブジェクトのプロパティを使用します。 たとえばこのようになります。
Zend_Layout は Zend_View を用いてレンダリングをしているので、 登録されているビューヘルパーはすべて使用できます。 またビューに登録されている変数も使用できます。 特に便利なのは、さまざまな プレースホルダヘルパー を使用できることでしょう。 これらを用いると、たとえば <head> セクションやナビゲーション部などのコンテンツを取得できます。
Zend_Layout を Zend Framework の MVC で使用する方法Zend_Controller には拡張用の機能が豊富に用意されています。 これは フロントコントローラ プラグイン や アクションコントローラ ヘルパー によって実現されているものです。 Zend_View にも ヘルパー は存在します。 Zend_Layout を MVC コンポーネントとともに使用すると、 これらのさまざまな拡張ポイントの恩恵を受けることになります。 Zend_Layout::startMvc() は、オプションの設定項目を指定して Zend_Layout のインスタンスを作成します。 そして、フロントコントローラプラグインを登録し、 ディスパッチループの終了後にレイアウトの中身をレンダリングするようにします。 また、アクションヘルパーを登録して、 アクションコントローラからレイアウトオブジェクトにアクセスできるようにします。 さらに、ビュースクリプトからレイアウトのインスタンスを取得するには Layout ビューヘルパーを使用します。 まずは、MVC と組み合わせるための Zend_Layout のインスタンスの作成方法を見てみましょう。
startMvc() には、オプションの配列あるいは Zend_Config オブジェクトを渡すことができます。 これによってインスタンスをカスタマイズします。 オプションの詳細については この節 を参照ください。 アクションコントローラからは、 アクションヘルパーでレイアウトのインスタンスにアクセスします。
ビュースクリプトでは、Layout ビューヘルパーを用いてレイアウトオブジェクトにアクセスします。 このビューヘルパーは、他のヘルパーとは異なり引数を受け取りません。 そして文字列ではなくオブジェクトを返します。 これにより、レイアウトオブジェクトのメソッドをすぐにコールできるようになります。
MVC に登録した Zend_Layout のインスタンスを取得するには、静的メソッド getMvcInstance() を使用します。
最後に、Zend_Layout のフロントコントローラプラグインが持つ、 レイアウトのレンダリング以外の重要な機能をひとつ紹介します。 レスポンスオブジェクトから名前つきセグメントをすべて取得し、 それをレイアウトの変数に代入するというものです。 このとき 'default' セグメントは 'content' という名前の変数に代入します。 これにより、アプリケーションのコンテンツにアクセスして それをビュースクリプト内でレンダリングできるようになります。 たとえば、こんな例を考えてみましょう。あなたの書いたコードがまず FooController::indexAction() を実行し、 デフォルトのレスポンスセグメントに何らかのコンテンツをレンダリングしてから NavController::menuAction() に転送します。 ここでは、レンダリングしたコンテンツをレスポンスセグメント 'nav' に格納します。最後に CommentController::fetchAction() に転送してコメントを取得しますが、その内容はデフォルトのレスポンスセグメントに (追記する方式で) レンダリングします。 そして、ビュースクリプト側ではそれを個別にレンダリングします。 この機能は、ActionStack アクションヘルパー や プラグイン と組み合わせて使うと非常に便利です。 アクションのスタックを作成してそれをループさせ、 ウィジェット形式のページを作成するというわけです。 Zend_Layout を単体のコンポーネントとして使用する方法単体のコンポーネントとして使用した場合は、Zend_Layout を MVC に組み込んだ場合に使用できる機能のほとんどが使えなくなります。 しかし、それでも次のふたつのメリットがあります。
単体のコンポーネントとして使用するには、 単純にレイアウトオブジェクトのインスタンスを作成して 各種アクセサで状態を設定し、 オブジェクトのプロパティに変数を設定してから レイアウトをレンダリングします。
|