ホームページ  >  記事  >  php教程  >  Zend-MVC イベント

Zend-MVC イベント

WBOY
WBOYオリジナル
2016-08-04 08:53:171176ブラウズ

ZendMvcMvcEvent は ZendEventManagerEvent を継承し、ZendMvcApplication::bootstrap() が実行されるときにトリガーされます。コントローラーが ZendMvcInjectApplicationEventInterface を実装している場合、MvcEvent がこれらのコントローラーに挿入されます。

MvcEvent は、次のオブジェクトのゲッターとルールを追加します: Application、Request、Response、Router、RouterMatch、Result (通常はコントローラーをディスパッチした結果)、ViewModel (通常はビュー モデルのレイアウトを表示)。アプリケーション、リクエスト、レスポンス、ルーター、およびビューモデルはすべて、ブートストラップ イベント プロセス中に挿入されます。次のルート イベントは RouteMatch オブジェクトに挿入され、ルーティング結果がカプセル化されます。 RouteMatch オブジェクトは MVC 全体で使用されるため、通常、Route、Request、および Response オブジェクトは RouteMatch を通じて取得されます。

MvcEvent は次のメソッドも定義します:

リーリー

イベントがトリガーされる順序:

名前 定数 説明
ブートストラップ MvcEvent::EVENT_ブートストラップ ViewManagerを作成してアプリケーションを起動します
ルート MvcEvent::EVENT_ROUTE ルーティング (またはルーティング関連のアクション) を実行します
派遣 MvcEvent::EVENT_DISPATCH 対応するコントローラー/動作への一致したルートのスケジュール
発送エラー MvcEvent::EVENT_DISPATCH_ERROR スケジュールプロセス中にエラーが発生したときにトリガーされます
レンダリング MvcEvent::EVENT_RENDER データを準備し、レンダリングタスクをビューレイヤーに委任します
レンダリングエラー MvcEvent::EVENT_RENDER_ERROR レンダリングプロセスでエラーが発生したときにトリガーされます
終了 MvcEvent::EVENT_FINISH すべてが完了すると、このイベントは対応するタスクをトリガーします

詳しい紹介:

MvcEvent::EVENT_BOOTSTRAP("ブートストラップ")

Listener: ZendMvcViewHttpViewManager、onBootstrap メソッドが呼び出されます。

機能: ビュー層を準備します (つまり、ZendMvcViewHttpViewManager をインスタンス化します)。

トリガーメソッド: ZendMvcApplication bootstrap() メソッド。

MvcEvent::EVENT_ROUTE("ルート")

リスナー 1: ZendMvcModuleRouteListener::onRoute

機能: 主にルートマッチングに含まれるパラメータキーが MODULE_NAMESPACE 定数と一致しないようにするために、モジュール名前空間をコントローラー名の前に追加するかどうかを決定します

Listener 2: ZendMvcRouteListener::onRoute ルートが一致しない場合、MvcEvent::EVENT_DISPATCH_ERROR がトリガーされます。

機能: ルーターへのリクエストの照合を試み、RouteMatch オブジェクトを返します。

トリガーメソッド: ZendMvcApplication::run

機能: ルーティングプロセス中にエラーが発生した場合、短いループコールバックを使用してイベントの継続的な伝播が停止されます。

MvcEvent::EVENT_DISPATCH("ディスパッチ")

リスナーは 2 つのカテゴリに分類されます。1 つはコンソール環境に限定され、もう 1 つは HTTP 環境に限定され、すべての環境に適用できるリスナーがあります。この記事では、CONSOLE 環境については紹介しません。コンソール環境については、公式ドキュメントを確認してください。

クラス ZendMvcViewHttpCreateViewModelListener には、このイベントのリスナーとして 2 つの関数があります。

1. createViewModelFromArray (コントローラーアクションが連想配列を返す場合、このリスナーは配列を ViewModel オブジェクトに変換します。

2. createViewModelFromNull (コントローラーが null 値を返した場合、このメソッドはそれを ViewModel オブジェクトに変換します)

クラス ZendMvcViewHttpRouteNotFoundStrategy::prepareNotFoundViewModel は 404ViewModel を作成して返します

クラス ZendMvcViewHttpInjectTemplateListener::injectTemplate は、View Model にテンプレートを挿入します。テンプレート名は、ルート (またはコントローラー内のアクション) と一致するコントローラー名から継承されます

クラス ZendMvcViewHttpInjectViewModelListener::injectViewModel ViewModel を挿入し、MvcEvent オブジェクトに追加します。 2 つの状況があります: a) ビュー モデルを含む子オブジェクトとして追加されます。 b) 結果を終了できる場合は、デフォルトの状況を置き換えます

クラス ZendMvcMiddlewareListener::onDispatch は MvcEvent::EVENT_DISPATCH_ERROR をトリガーし、サービス マネージャーから一致する PSR-7 ミドルウェアをロードしてディスパッチします。

クラス ZendMvcDispatchListener::onDispatch は MvcEvent::EVENT_DISPATCH_ERROR をトリガーし、上記と同じ効果があります。

クラス ZendMvcControllerAbstractController::onDispatch このメソッドは抽象クラスです。

トリガー方法:

ZendMvcApplication::run は、短絡コールバックを使用してイベントの伝播を終了します。 (ルーティング時にエラーが発生した場合)

ZendMvcControllerAbstractController::dispatch リスナーが Response オブジェクトを返すと、イベントの伝播が終了します。 AbstractController がこのイベントをリッスンするたびに、トリガーされたときに onDispatch メソッドが呼び出されます。

MvcEvent::EVENT_RENDER("レンダリング") リスナー:

ZendMvcViewConsoleDefaultRenderingStrategy::render はビューのレンダリングに使用されます

ZendMvcViewHttpDefaultRenderingStrategy::render もビューをレンダリングします。上記の環境との違いに注意してください

トリガー方法:

ZendMvcApplication::competeRequest このイベントは、MvcEvent::FINISH がトリガーされる前にトリガーされます。

MvcEvent::EVENT_FINISH("終了") リスナー:

ZendMvcSendResponseListener::sendResponse は、SendResponseEvent をトリガーして応答を準備します。

トリガー方法:

ZendMvcApplication::run MvcEvent::ROUTE または MvcEvent::DISPATCH イベントが正しい ResponseInterface を返すと、このイベントがトリガーされます

ZendMvcApplication::completeRequest は、MvcEvent::RENDER の後にトリガーされます (つまり、この時点でビューがレンダリングされています)。

SendResponseイベントについて

ZendMvcResponseSenderSendResponseEvent は次のメソッドを定義します:

setResponse($response)

getResponse()

setContentSent()

コンテンツ送信()

setHeadersSent()

ヘッダーSent()

これらのメソッドは、応答ヘッダーと応答コンテンツを設定するために使用されます。

リスナー:

ZendMvcSendResponseListenerPhpEnvironmentResponseSender::__invoke は環境 HTTP を使用します

ZendMvcSendResponseListenerConsoleResponseSender::__invoke は環境コンソールを使用します。

ZendMvcSendResponseListenerSimpleStreamResponseSender::__invoke

MvcEvent::このイベントは、FINISH イベントがトリガーされた後に実行されます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。