目次
Zend_Controller
は、モデル - ビュー - コントローラ
(MVC) パターンに基づいたウェブサイトを構築するための基本機能を提供します。
Zend_Controller
は軽量で部品化されており、拡張しやすいように設計されています。
この設計は、柔軟性および利用者に対する自由度を確保するための最低限のものであり、
Zend_Controller
を使用して構築したシステムは、
ほぼ同じようなコード配置・規約を共有することができます。
Zend_Controller
の処理の流れは、
いくつかの部品にわかれて実装されています。
これらの部品のすべてを完璧に理解する必要はありませんが、
処理の概要を知っておくことは有用です。
Zend_Controller_Front
は、
Zend_Controller
の処理全体を取りまとめます。
FrontController パターンであるといえます。
サーバから受け取ったすべてのリクエストを Zend_Controller_Front
が処理し、最終的にリクエストを ActionController
(Zend_Controller_Action
) に委譲します。
Zend_Controller_Router
はルータです。URI を受け取り、
どのコントローラのどのアクションがリクエストを処理すべきなのかを決定します。
コントローラ、アクションおよびオプションのパラメータは
Zend_Controller_Dispatcher_Token
というオブジェクトにまとめられます。これが、
Zend_Controller_Dispatcher
によって処理されます。
ルーティングが発生するのは一度だけ、
つまり最初にリクエストを受け取って最初のコントローラに渡される際のみです。
Zend_Controller_Dispatcher
はディスパッチャです。
Zend_Controller_Dispatcher_Token
を受け取って適切なコントローラファイルを探し、
そのファイル内のコントローラクラス
(Zend_Controller_Action
を実装していなければなりません)
のインスタンスを作成し、
最後にコントローラオブジェクトのアクションメソッドを実行します。
ルーティングが一度だけ発生するのとは異なり、
ディスパッチ処理は繰り返し発生します。
すべてのアクションが順にディスパッチされるまで、
Zend_Controller_Dispatcher
は
Zend_Controller_Front
から繰り返しコールされます。
Zend_Controller_Action
はコントローラの基底コンポーネントです。
各コントローラは Zend_Controller_Action
クラスを継承した単一のクラスで、アクションメソッドを持っています。
Zend_Controller
の処理の流れは比較的シンプルです。
Zend_Controller_Front
がリクエストを受け取り、
Zend_Controller_Router
をコールして、
配送先となるコントローラ (そしてコントローラ内のアクション)
を決定します。Zend_Controller_Router
は URI
を分解して Zend_Controller_Dispatcher_Token
オブジェクトに保存します。ここに配送先の情報が含まれます。
その後、Zend_Controller_Front
はディスパッチループに突入します。
まず Zend_Controller_Dispatcher
をコールしてトークンを渡し、
実際のコントローラ・アクションに処理を渡します。
コントローラが終了すると、処理は Zend_Controller_Front
に戻ります。コントローラが新しいトークンを返した
(別のコントローラを処理するように指示された) 場合は、
ループが続けられて次の配送処理が行われます。
それ以外の場合は、処理がそこで終了します。
はじめてのコントローラを作り始める前に、ルーティング処理が
Zend_Controller_Router
でどのように実装されているのかを知る必要があるでしょう。
処理手順として、一度だけ発生するルーティングと繰り返し発生するディスパッチがあることを覚えておきましょう。
Zend_Controller_Front
は Zend_Controller_Router
をコールし、URI をコントローラとアクションに対応させます。
Zend_Controller_Router
は URI を受け取ってそれを分解し、
バリューオブジェクト Zend_Controller_Dispatcher_Token
に保存します。
そしてそれがディスパッチャ (Zend_Controller_Dispatcher
)
に渡されます。
ルータがコントローラ名とアクション名を決定する方法は、単純なものです。
http://framework.zend.com/controller/action/
上の例で、最初の部分が常にコントローラの名前となり、 2 番目の部分が常にアクションの名前となります。
オプションで、コントローラに渡すパラメータを URI に含めることができます。 これは キー/値 の組み合わせの形式になります。
http://framework.zend.com/controller/action/key1/value1/
URI の /controller/
の部分に何も存在しない場合は、
"index
" と解釈されます。また URI の /action/
の部分に何も存在しない場合は、"index
" と解釈されます。
以下の例を参照ください。
http://framework.zend.com/roadmap/future/ コントローラ: roadmap アクション : future http://framework.zend.com/roadmap/ コントローラ: roadmap アクション : index http://framework.zend.com/ コントローラ: index アクション : index
注意 | |
---|---|
現在、新しいルータを開発中です。このルータには URI の置換エンジンが含まれており、 現在のルータよりはるかに柔軟に使うことができます。 これは、ごく近い将来に予定されているプレビュー版に含まれる予定です。 |
コントローラの名前、コントローラ内のアクションの名前、
そしてオプションのパラメータの内容が、ひとつのトークン
Zend_Controller_Dispatcher_Token
にまとめられます。
このトークンは Zend_Controller_Front
に返され、
ディスパッチループに突入します。ディスパッチループに入ると、このトークンが
Zend_Controller_Dispatcher
に渡されます。
ディスパッチトークンは単純なバリューオブジェクトで、
ルータやディスパッチャのインターフェイスを実装したクラスと
Zend_Controller_Front
との間のデータのやり取りに使用されます。
これはコントローラ、アクションそしてアクションに渡すパラメータの内容をまとめたものです。
コントローラ名へのアクセスは getControllerName()
および setControllerName()
によって行います。
コントローラ内からコールされるアクションの名前へのアクセスは
getActionName()
および setActionName()
によって行います。
アクションに渡されるパラメータは キー/値 の組み合わせからなる連想配列で、
getParams()
および setParams()
によってアクセスします。