ホームページ >バックエンド開発 >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