Zend_Controller は、MVC パターンを使用してサイトを構築するための基礎です。 Zend_Controller システムは、軽量でモジュール式の拡張可能なシステムです。必要なコア部分のみを提供するため、開発者は非常に自由度が高く、柔軟に独自のサイトを構築できます。 Zend_Controller を使用するサイトのコード構造は部分的に似ています。
Zend_Controller のワークフローは、いくつかのコンポーネントを通じて実装されます。これらのコンポーネントの意味を完全に理解する必要はありませんが、ワークフローを少し理解しておくと役に立ちます:
Zend_Controller_Front (フロントエンド コントローラー) は Zend_Controller_Controller システムのオーガナイザーであり、FrontController デザイン パターンの実装です。 Zend_Controller_Front は、サーバーによって受け入れられたすべてのリクエストを処理し、最終的にリクエストを ActionController (Zend_Controller_Action) に割り当てる責任を負います。 Zend_Controller_Controller は、顧客の元のリクエストを対応する処理コンポーネント (アクション) に転送して、特定のビジネス処理を完了します。
Zend_Controller_Router はルーターに相当します。ルーティングは、URI を分解し、それを処理するためにどのコントローラーとどのアクションを使用するかを決定するプロセスです。コントローラー、アクション、およびオプションのパラメーターの定義は、オブジェクト Zend_Controller_Dispather_Token にカプセル化され、Zend_Controller_Dispatcher によって処理されます。ルーティングは 1 回だけ行われます。つまり、リクエストが最初のコントローラーにディスパッチされる前に、サーバーが受信したときです。 Zend_Controller_Router は、顧客のリクエスト URI を解析し、パラメーターを分析して、どの ActionController をターゲットにするかを決定します。 Zend_Controller_Router は、分析されたパラメータを Zend_Controller_Dispather_Token オブジェクトにカプセル化します。
いわゆるルーターは、私たちがよく知っているネットワークルーターの機能に非常に似ており、ネットワークアドレスを決定し、パスを選択する機能があります。ここではリダイレクトに使用されます。
「割り当て」のプロセスは、Zend_Controller_Dispatcher_Token に基づいて適切なコントローラー ファイルを見つけ、その中でコントローラー クラスをインスタンス化し (Zend_Controller_Action を実装する必要があります)、最後にコントローラーでアクションを実行します。ルーティングとは異なり、割り当てプロセスは、すべてのアクションが順番に割り当てられるまで、Zend_Controller_Front によって継続的に呼び出されます。 Zend_Controller_Dispatcher は、Zend_Controller_Router によるリクエスト URI (Zend_Controller_Dispather_Token オブジェクト) の解析結果に基づいて、リクエストを対応する Zend_Controller_Action に転送します。
Zend_Controller_Action は最も基本的なコントローラーです。それぞれの特定のコントローラーは Zend_Controller_Action クラスから継承し、Zend_Controller_Action のサブクラスであり、独自のアクション メソッドを持ちます。 Zend_Controller_Action は基本的なコントローラーであり、ユーザー リクエストの特定の処理を実際に実行します。
Zend_Controller のワークフローは非常にシンプルです。 Zend_Controller_Front がリクエストを受信すると、Zend_Controller_Router がどのコントローラー (Zend_Controller_Action を実装するクラス) に割り当てるかを決定します。 Zend_Controller_Router は、URI を分解して Zend_Controller_Dispatcher_Token オブジェクトにカプセル化します。次に、Zend_Controller_Front は配布ループに入り、Zend_Controller_Dispatcher を呼び出し、トークン オブジェクトをディスパッチャーに渡して、処理する特定のコントローラーとアクションに割り当てます。コントローラーが終了すると、制御は Zend_Controller_Front に移ります。コントローラーが別のコントローラーを割り当てる必要があると判断した場合 (新しいトークン オブジェクトを返す)、別の割り当てが完了するまでループが継続します。
Zend_Controller ワークフロー図は次のとおりです:
最初のコントローラーを構築する前に、Zend_Controller_Router のリダイレクト プロセスがどのように機能するかを理解する必要があります。ワークフローは 2 つのステップに分かれていることに注意してください。1 つはルーティングであり、1 回だけ実行されます。もう 1 つはディスパッチであり、周期的なプロセスです。
Zend_Controller_Front は、Zend_Controller_Router を呼び出して、URI をコントローラー (Zend_Controller_Action クラス) とその中のアクションにマップします。 Zend_Controller_Router は URI を分解し、オブジェクト Zend_Controller_Dispatcher_Token を生成し、それをディストリビューター (Zend_Controller_Dispatcher) に渡します。
ルーターは非常に単純なメソッドを使用して、使用するコントローラーとそのアクションを決定します (URI は Zend_Controller_Action にマップされます)。
http://www.bkjia.com/controller/action/上のコントローラーは使用したいコントローラーであり、アクションは使用したいアクションです。
その他のオプションの GET パラメーターを URI で定義し、コントローラーに渡すことができます。形式はキー/値です: http://framework.zend.com/controller/action/key1/value1/
/controller/ が指定されていない場合、デフォルトでインデックスが呼び出されます。 /action/ が記述されていない場合は、デフォルトでindexが呼び出されます。例:
リーリーコントローラー、アクション名、およびその他のパラメーターは、トークン オブジェクト - Zend_Controller_Dispatcher_Token にカプセル化されます。このオブジェクトは Zend_Controller_Front に戻され、割り当てプロセスに入り、Zend_Controller_Dispatcher に渡されます。
Token オブジェクトは非常に単純なオブジェクトで、Zend_Controller_Front とルーターおよびディスパッチャー インターフェイスを実装するクラスの間で渡されます。コントローラー、アクション、その他の GET パラメーターをカプセル化します。
いわゆる割り当てプロセスは、トークン オブジェクト (Zend_Controller_Dispatcher_Token) から情報 (コントローラーの名前、アクションの名前、パラメーターなど) を抽出し、コントローラーをインスタンス化し、その中のアクションを呼び出して処理します。 。