Zend FrameworkチュートリアルのフロントエンドコントローラZend_Controller_Frontの使い方の詳細

7280 ワード

この例では、Zend FrameworkチュートリアルのフロントエンドコントローラZend_について説明します.Controller_Frontの使い方.皆さんの参考にしてください.具体的には以下の通りです.
主な機能
ZendFrameworkのMVCが実現するコアメカニズムはZend_Controller_Frontフロントエンドコントローラ、リクエスト環境の初期化、リクエストの処理、ルーティング、レスポンス操作の完了、Zend_Controller_Frontは単一のモードを採用しているので、1つのアプリケーションにはフロントエンドコントローラが1つしかありません.フロントエンドコントローラに特別な機能が必要な場合はZend_を継承できますController_Frontカスタムフロントエンドコントローラ.
主な方法
getInstance()
フロントエンドコントローラのインスタンスを取得します.フロントエンドコントローラオブジェクトを作成する唯一の方法です.

$front = Zend_Controller_Front::getInstance();


setControllerDirectory()とaddControllerDirectory()
setControllerDirectory()アクションコントローラaction controllerクラスファイルの格納場所を設定します.パラメータは、パス文字列または関連配列であってもよい.
例:

//         /application   
//    
$front->setControllerDirectory('../application/controllers');
//     
$front->setControllerDirectory(array(
  'default' => '../application/controllers',
  'blog'  => '../modules/blog/controllers',
  'news'  => '../modules/news/controllers',
));
// Add a 'foo' module directory:
$front->addControllerDirectory('../modules/foo/controllers', 'foo');


Note:addControllerDirectory()を使用するときにモジュール名を付けないとdefaultモジュールにディレクトリが設定されます.ディレクトリが設定されている場合は上書きされます.
コントローラディレクトリの現在の設定はgetControllerDirectory()で取得できます.モジュール/ディレクトリペアの関連配列が返されます.
addModuleDirectory()とgetModuleDirectory()
フロントエンドコントローラの機能の1つは、「モジュール」と呼ばれる独立したコンポーネントを作成するためにモジュールディレクトリ構造を定義することです.
各モジュールは、独自のディレクトリにあり、デフォルトのモジュールのディレクトリ構造と同じです.たとえば、少なくとも1つの「controllers」文字ディレクトリと「views」サブディレクトリ、および他のアプリケーションサブディレクトリがあります.
addModuleDirectory()は、1つ以上のモジュールディレクトリを含むディレクトリ名を渡します.スキャンを行い、フロントエンドコントローラにコントローラディレクトリとして追加します.
次に、特定のモジュールまたは現在のモジュールパスを決定したい場合は、getModuleDirectory()を呼び出し、オプションでモジュール名を渡してモジュールディレクトリを取得します.
dispatch()
dispatch(Zend_Controller_Request_Abstract$request=null、Zend_Controller_Response_Abstract$response=null)は、フロントエンドコントローラの最も煩雑な作業を完了します.このメソッドには、オプションのパラメータ要求オブジェクトおよび/または応答オブジェクトがあり、開発者がカスタマイズされた各オブジェクトにアクセスできるようにします.
リクエストまたは応答オブジェクトが入力されていない場合、dispatch()は以前に登録されたオブジェクトをチェックして使用し、発見されていない場合はデフォルトのオブジェクトバージョンを作成します(両方ともHTTPオブジェクトがデフォルトで使用されます).
同様に、dispatch()は、登録されたルータおよびディスペンサオブジェクトを先にチェックし、見つからない場合はデフォルトバージョンをインスタンス化します.
配布プロセスには、ルーティング(Routing)、配布(Dispatching)、応答(Response)の3つの異なるイベントがあります.
ルーティングは1回のみ発生し、dispatch()が呼び出されるとリクエストオブジェクトの値が利用されます.配布は1つのサイクルで発生します.リクエストは、複数のアクションの配布を示すか、コントローラまたはプラグインがリクエストオブジェクトをリセットし、追加のアクションを強制的に配布する可能性があります.すべてが完了すると、フロントエンドコントローラは応答オブジェクトを返します.
run()
Zend_Controller_Front::run($path)は静的メソッドで、コントローラを含むディレクトリへのパスを指すパラメータが1つしかありません.まずgetInstance()を使用してフロントエンドコントローラのインスタンスを取得し、setControllerDirectory()を使用して転送パスを登録し、最後に配布します.
基本的に、フロントエンドコントローラ環境のカスタマイズが要求されない場合、run()はフロントエンドコントローラ環境を容易に構築する方法である.

Zend_Controller_Front::run('../application/controllers');


環境アクセサメソッド
上記の方法のほかにも、フロントエンドコントローラ環境に影響を及ぼすアクセスメソッドが多く、フロントエンドコントローラエージェント(delegate)のクラスの環境にも影響を及ぼす.
resetInstance()メソッドは、現在のすべての設定をクリアします.主にテストに用いられるが、いくつかのフロントエンドコントローラをチェーンしたい場所でも役に立つ(but it can also be used for instances where you wish to chain together multiple front controllers).
(set|get)DefaultControllerName()メソッドは、デフォルトのコントローラに別の名前を指定し(そうでない場合は「index」を使用)、現在の値を取得します.エージェント配布器になります.
(set|get)DefaultAction()メソッドは、デフォルトのアクションに別の名前を指定し(そうでない場合は「index」を使用)、現在の値を取得します.エージェント配布器になります.
(set|get)Request()メソッドは、配布中に使用されるリクエストクラスまたはオブジェクトを指定し、現在のリクエストオブジェクトを取得します.リクエスト・オブジェクトを設定すると、クラス・ファイルをロードしてインスタンスを作成するリクエスト・クラスの名前を入力できます.
(set|get)Router()メソッドは、配布中に使用するルータクラスまたはオブジェクトを指定し、現在のオブジェクトを取得します.ルータを設定すると、クラスファイルをロードしてインスタンスを作成するルータクラスの名前を入力できます.
ルータオブジェクトを取得するときは、まず1つあるかどうかを確認し、ない場合はデフォルトのルータインスタンス(rewriteルータ)を作成します.
(set|get)BaseUrl()メソッドは、ルーティング要求時にスプリット(strip)のベースアドレス(base URL)を指定し、現在の値を取得します.この値はルーティング前にルータに提供されます.
(set|get)Dispatcher()メソッドは、配布中に使用される配布器クラスまたはオブジェクトを指定し、現在のオブジェクトを取得します.配布オブジェクトを設定すると、クラスファイルをロードしてインスタンスを作成する配布クラスの名前を入力できます.
配布オブジェクトを取得するときは、まず既存の配布オブジェクトがあるかどうかを確認します.ない場合は、デフォルトの配布インスタンスが作成されます.
(set|get)Response()メソッドは、配布中に使用される応答クラスまたはオブジェクトを指定し、現在のオブジェクトを取得します.応答オブジェクトを設定すると、クラスファイルをロードしてインスタンスを作成する応答クラスの名前を入力できます.
registerPlugin(Zend_Controller_Plugin_Abstract$plugin,$stackIndex=null)メソッドでは、プラグインオブジェクトの登録を許可します.オプションのパラメータ$stackIndexを設定すると、プラグインの実行順序が決まります.
unregisterPlugin($plugin)メソッドプラグインオブジェクトを除去します.$pluginは、プラグインオブジェクトまたはプラグインクラスの削除を表す文字列であってもよい.
throwExceptions($flag)メソッドは、配布中に異常を放出する能力をオンまたはオフにするために使用されます.デフォルトでは、例外が応答オブジェクトに発生し、配置されます.throwExceptions()をオンにすると、この動作が上書きされます.
returnResponse($flag)メソッドは、フロントエンドコントローラがdispatch()からリクエストオブジェクト(true)を返すかどうかを通知し、そうでなければ応答オブジェクト(false-)を自動的に送信する.デフォルトでは、応答オブジェクトは自動的に送信されます(Zend_Controller_Response_Abstract::sendResponse();returnResponse()をオンにすると、この動作が上書きされます.
応答オブジェクトを返す理由には、応答を送信する前に例外をチェックし、応答の様々な属性(メッセージヘッダなど)を記録することなどが含まれる.
フロントエンドコントローラパラメータ
フロントエンドコントローラは、さまざまなコントローラコンポーネントのレジストリとして使用できると説明しています.それは「param」家族の方法でできます.これらの方法では,フロントエンドコントローラに任意のタイプのデータ,すなわちオブジェクトと変数を登録することで,配布チェーン内のいつでも取得できる.これらの変数は、ルータ、配布器、およびアクションコントローラに渡されます.次のような方法があります.
setParam($name,$value)メソッドは、$valueの単一パラメータ$nameに設定されます.setParams(array$params)メソッドは、関連配列によって複数のパラメータを一度に設定します.getParam($name)メソッドは、$name識別子によって単一のパラメータを取得します.getParams()メソッドは、パラメータリスト全体を一度に取得します.clearParams()メソッドでは、1つのパラメータ(単一の文字列識別子を入力)、複数のパラメータ(文字列識別子配列を入力)、パラメータスタック全体(パラメータを入力しない)を空にすることができます.
配布チェーンで特別な用途を持ついくつかの事前定義されたパラメータを設定できます.
useDefaultControllerAlwaysは、配布器が配布できない要求に遭遇したときにデフォルトモジュールのデフォルトコントローラを使用するように要求するために使用されます.このデフォルトはオフです.
遭遇する可能性のあるMVC異常を読むと、この設定を使用したより詳細な情報が得られます.
disableOutputBufferingは、動作コントローラによって生成された出力をキャプチャするために、is used to hint to配布器に出力バッファを使用しないことを示すために使用される.デフォルトでは、配布器は出力をスナップし、応答オブジェクトの本体コンテンツに追加します.
NoViewRendererは、ViewRendererを無効にします.このパラメータをtrueに設定すると、アシスタントを無効にできます.
NoErrorHandlerは、エラープロセッサプラグインを無効にします.このパラメータをtrueに設定すると、プラグインを無効にできます.
カスタムフロントエンドコントローラ
フロントエンドコントローラを継承するには、getInstance()メソッドを少なくとも上書きする必要があります.

class My_Controller_Front extends Zend_Controller_Front
{
  public static function getInstance()
  {
    if (null === self::$_instance) {
      self::$_instance = new self();
    }
    return self::$_instance;
  }
}


getInstance()を上書きし、後でZend_を呼び出すことを保証します.Controller_Front::getInstance()は、Zend_ではなくサブクラスのインスタンスを返します.Controller_Frontインスタンスは、いくつかの代替ルータおよびビューアシスタントにとって非常に有用です.
通常、新しい機能を追加する必要がない限り、フロントエンドコントローラを継承する必要はありません(プラグインの自動ローダや、アクションアシスタントパスを指定する方法など).変更したい場所には、コントローラディレクトリの格納方法、デフォルトのルータ、配布器の変更が含まれます.
ZendFramewrokが提供するデフォルトのフロントエンドコントローラは十分ですBootstrap機能により、手動でコードを記述してZend_を変更する必要はありません.Controller_Frontのデフォルトメカニズム.だから通常Zend_Controller_Frontはアプリケーションには存在しません.Zend_を使用する必要がある場合Controller_Frontが提供する機能はZend_を通じてController_Front::getInstance();インスタンスを取得します.
zendに関する詳細について興味のある読者は、「Zend FrameWorkフレームワーク入門チュートリアル」、「php優秀開発フレームワーク総括」、「Yiiフレームワーク入門および常用テクニック総括」、「ThinkPHP入門チュートリアル」、「phpオブジェクト向けプログラム設計入門チュートリアル」、「php+mysqlデータベース操作入門チュートリアル」および「phpよくあるデータベース操作テクニック要約」を参照してください.
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.