ホームページ >バックエンド開発 >PHPチュートリアル >symfony2 ソースコード解析 - 起動プロセス 2、symfony2 ソースコード_PHP チュートリアル
前回の記事では、Symfony2 フレームワークのソースコードを分析し、Symfony2 がリクエストの前半をどのように完了するかを検討しました。前半は、Symfony2 フレームワークがリクエストの準備をしているものとして理解できます。コンテナの生成、キャッシュ、バンドルの初期化、その他の準備を含むリクエストを処理します (Symfony2 ソース コード分析 - 起動プロセス 1)。この記事では、Symfony2 が要求されたデータに基づいて Response オブジェクトを生成し、応答データをクライアントに返す方法について説明します。
分析の前に、Symfony2 のイベント駆動メカニズム: Symfony2 イベント駆動について理解する必要があります。
本題に戻りますが、Symfony2 リクエストのワークフローは実際には Symfony2 カーネルのイベント ドライバーによって完了します。以下は Symfony2 フレームワークによって定義されるカーネル イベントです。最終クラスカーネルイベント { /** * REQUESTイベントはリクエストの最初に発生します ・発送 * * このイベントを使用すると、リクエストに対するレスポンスを事前に作成できます。 * フレームワーク内の他のコードが実行されます。イベントリスナーメソッド * SymfonyComponentHttpKernelEventGetResponseEventを受け取ります * 実例。 * * @var 文字列 * * @api */ const REQUEST = 'kernel.request'; /** * EXCEPTION イベントは、キャッチされなかった例外が発生したときに発生します * * このイベントを使用すると、スローされた例外または * スローされた例外を変更します。イベントリスナーメソッドが受け取るのは、 * SymfonyComponentHttpKernelEventGetResponseForExceptionEvent * 実例。 * * @var 文字列 * * @api */ const EXCEPTION = 'kernel.例外'; /** ※VIEWイベントはコントローラの戻り値が返されたときに発生します。 * は応答インスタンスではありません * * このイベントを使用すると、 *コントローラー。イベントリスナーメソッドは、 * SymfonyComponentHttpKernelEventGetResponseForControllerResultEvent * 実例。 * * @var 文字列 * * @api */ const VIEW = 'kernel.view'; /** * CONTROLLER イベントは、コントローラーが見つかると発生します。 * リクエストの処理 * * このイベントを使用すると、 * リクエスト。イベントリスナーメソッドは、 * SymfonyComponentHttpKernelEventFilterControllerEvent インスタンス。 * * @var 文字列 * * @api */ const CONTROLLER = 'kernel.controller'; /** * RESPONSE イベントは、応答が作成されると発生します。 * リクエストへの返信 * * このイベントを使用すると、応答を変更または置き換えることができます。 * と答えました。イベントリスナーメソッドは、 * SymfonyComponentHttpKernelEventFilterResponseEvent インスタンス。 * * @var 文字列 * * @api */ const RESPONSE = 'kernel.response'; /** * 応答が送信されると TERMINATE イベントが発生します * * このイベントにより、コストのかかる応答後ジョブを実行できます。 * イベントリスナーメソッドは * SymfonyComponentHttpKernelEventPostResponseEvent インスタンス。 * * @var 文字列 */ const TERMINATE = 'kernel.terminate'; /** ※ FINISH_REQUEST イベントは、リクエストに対するレスポンスが生成されたときに発生します。 * * このイベントにより、地球規模および環境の状態をリセットできます。 * リクエスト中にアプリケーションが変更されたとき。 * * @var 文字列 */ const FINISH_REQUEST = 'kernel.finish_request'; } コードを表示
私は、イベントカスケード、対応する内部核イベントを書き込むことができ、Symfony2 がこのイベントを起動するときに、対応するイベントカケーターが実行されます。会,去大会(Symfony2)登记(监听)参加50米短跑(イベント),当50米短跑比赛开開始(イベント被触発),那你就奔跑吧(监听器执行,其实就是一执行関数,関数完了)何か仕事はあなたの要求に応じます)、少年。
Symfony2 の内核イベント処理フローの大部分の作業都在 HttpKernel::handleRaw メソッド中:リーリー リーリー 1 private関数 filterResponse(レスポンス $response, リクエスト $request, $type) 2 { 3 $event = new FilterResponseEvent($this, $request, $type, $response); 4 5 $this->dispatcher->dispatch(KernelEvents::RESPONSE, $event); 6 7 $this->finishRequest($request, $type); 8 9 return $event->getResponse(); 10 } 11 12 /** 13 * 終了リクエストイベントを発行し、スタックからリクエストをポップします。 14 * 15 * ここでは操作の順序が重要であることに注意してください。 16 * {@link RequestStack::getParentRequest()} などの操作により、 17 * 奇妙な結果。 18 * 19 * @param リクエスト $request 20 * @param int $type 21 */ 22 private関数finishRequest(リクエスト$request, $type) 23 { 24 $this->dispatcher->dispatch(KernelEvents::FINISH_REQUEST, new FinishRequestEvent($this, $request, $type)); 25 $this->requestStack->pop(); 26 } コードを表示
図2
Symfony2フレームのイベント分発行機的コア心代コード:
リーリー
mHandler.postDelayed(mPowerLongPress, ViewConfiguration.getGlobalActionKeyTimeout());
mProwerLongPress は実行可能です。 GlobalActions 内の時間調整用showDialog メソッド。したがって、このダイアログは GlobalActions によって管理されており、PowerDialog は以前のバージョンですでに使用されています。 .VIBRATE_TYPE_RINGER, on ? AudioManager.VIBRATE_SETTING_ON : AudioManager.VIBRATE_SETTING_OFF);
これは、音声の処理に問題がなく、これも確認できません。助けてください。
http://www.bkjia.com/PHPjc/899447.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/899447.html