ホームページ  >  記事  >  バックエンド開発  >  PHPのYiiフレームワークとそのルーティング機能の動作機構を詳しく解説、yii動作機構_PHPチュートリアル

PHPのYiiフレームワークとそのルーティング機能の動作機構を詳しく解説、yii動作機構_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:56:50722ブラウズ

PHPのYiiフレームワークとそのルーティング機能、yiiの動作機構の詳細説明

動作機構の概要
Yii アプリケーションが HTTP リクエストの処理を開始するたびに、おおよそのプロセスが実行されます。

  • ユーザーはエントリ スクリプト web/index.php にリクエストを送信します。
  • エントリ スクリプトは構成配列をロードし、リクエストを処理するアプリケーション インスタンスを作成します。
  • アプリケーションは、リクエスト アプリケーション コンポーネントを通じてリクエストされたルートを解決します。
  • アプリケーションは、リクエストを特別に処理するコントローラー インスタンスを作成します。
  • コントローラーはアクション インスタンスを作成し、アクションに関連するフィルター (アクセス フィルター) を実行します。
  • いずれかのフィルターが検証に失敗した場合、アクションはキャンセルされます。
  • すべてのフィルターに合格すると、アクションが実行されます。
  • このアクションは、通常はデータベースからデータ モデルを読み込みます。
  • アクションはビューをレンダリングし、必要なデータモデルをビューに提供します。
  • レンダリングされた結果は、応答アプリケーション コンポーネントに返されます。
  • レスポンシブコンポーネントはレンダリング結果をユーザーのブラウザに送り返します。

以下の図は、アプリケーションがリクエストを処理する方法を示しています。

2016317145658183.png (1144×876)

ブートストラッピング
ブートストラップとは、アプリケーションが新しく受け入れられたリクエストの解析と処理を開始する前に、事前に環境を準備するプロセスを指します。起動ガイダンスはエントリースクリプト(Entry Script)とアプリケーション本体(application)の2箇所で行われます。

エントリースクリプトでは、各クラスライブラリのクラスファイルオートローダー(Class Autoloader、以下オートローダー)を登録する必要があります。これには主に、autoload.php ファイル経由でロードされる Composer オートローダーと、Yii クラス経由でロードされる Yii オートローダーが含まれます。次に、エントリ スクリプトはアプリケーションの構成を読み込み、アプリケーション プリンシパルのインスタンスを作成します。

アプリケーション本体のコンストラクターでは、次のガイダンス作業が実行されます:

  • yiibaseApplication::preInit() (初期化前) メソッドを呼び出して、yiibaseApplication::basePath 属性などの優先度の高いアプリケーション属性を設定します。
  • yiibaseApplication::errorHandlerを登録します。
  • 指定されたアプリケーション構成を通じてアプリケーションの各属性を初期化します。
  • yiibaseApplication::init() (初期化) メソッドを呼び出すことにより、yiibaseApplication::bootstrap() を順番に呼び出してブートストラップ コンポーネントを実行します。
  • 拡張機能マニフェスト ファイルvendor/yiisoft/extensions.phpをロードします。
  • 各拡張機能で宣言されたブートストラップ コンポーネントを作成して実行します。
  • アプリケーションの Bootstrap 属性で宣言された各アプリケーション コンポーネントと各モジュール コンポーネント (存在する場合) を作成して実行します。

ブートストラップは各リクエストを処理する前に実行する必要があるため、このプロセスを可能な限り軽量にすることが非常に重要です。このステップを可能な限り最適化してください。

ブートコンポーネントを登録しすぎないように注意してください。 HTTP リクエスト処理のライフサイクル全体を通じて機能する必要がある場合にのみ使用する必要があります。その使用例を挙げると、モジュールで追加の URL 解析ルールを登録する必要がある場合は、リクエストを解析する前に URL 解析ルールが有効になるように、アプリケーションのブートストラップ属性にそのルールを登録する必要があります。 (注釈: つまり、パフォーマンスのニーズのために、URL 解析などのいくつかの操作を除いて、ほとんどのコンポーネントはブート プロセス中にすべてロードされるのではなく、オンデマンドでロードされる必要があります。)

実稼働環境では、APC などのバイトコード キャッシュをオンにして、PHP ファイルのロードと解析に必要な時間をさらに最小限に抑えることができます。

一部の大規模なアプリケーションには、非常に複雑なアプリケーション構成が含まれており、多くの小さな構成ファイルに分割されています。この時点で、エントリ スクリプトがアプリケーション インスタンスを作成する前に、構成配列全体をキャッシュし、キャッシュから直接ロードすることを検討できます。


yiiエントリーファイル
ここではサードパーティの設定管理プラグインが使用されています: marcovwout は Yii 設定を管理します。詳細については説明しません。残っているのは、基本的なグローバル変数の設定だけです。設定配列を Yii::createWebApplication に渡し、run メソッドを呼び出します。Web アプリケーションは実行中ですか? はい、最上位レベルの抽象化は次のようになります。対応する設定をコンテナに渡すと、アプリケーションが実行できるようになります。通常はこの構成に基づいています。
YiiBase の 2 つの重要なメソッド (インポート、オートロード) について話しましょう

2016317145740223.png (561×219)

ここではサードパーティの設定管理プラグインが使用されています: marcovwout は Yii 設定を管理します。詳細については説明しません。残っているのは、基本的なグローバル変数の設定だけです。設定配列を Yii::createWebApplication に渡し、run メソッドを呼び出します。Web アプリケーションは実行中ですか? はい、最上位レベルの抽象化は次のようになります。対応する設定をコンテナに渡すと、アプリケーションが実行できるようになります。通常はこの構成に基づいています。

ルーティング
エントリ スクリプトが yiiwebApplication::run() メソッドを呼び出すと、最初に実行される操作は入力リクエストを解析し、次に対応するコントローラー操作をインスタンス化してリクエストを処理することです。このプロセスはルーティングと呼ばれます。 (翻訳注: 中国語では動詞でもあり名詞でもあります)

ルーティングを解決する

ルーティング ガイダンスの最初のステップは、受信リクエストを解析してルートを作成することです。 「コントローラー」の章で説明したように、ルートはコントローラーのアクションを見つけるために使用されるアドレスです。このプロセスは、リクエスト アプリケーション コンポーネントの yiiwebRequest::resolve() メソッドを通じて実装され、URL マネージャーを呼び出して実際のリクエスト解決を実行します。

デフォルトでは、受信リクエストには r という名前の GET パラメータが含まれ、その値はルートとして扱われます。ただし、yiiwebUrlManager::enablePrettyUrl を有効にすると、リクエストのルートを決定するときにさらに多くの処理が発生します。具体的な詳細については、URL の解析と生成の章を参照してください。

最終的にルートを決定できない場合、リクエスト コンポーネントは yiiwebNotFoundHttpException 例外 (注釈: 有名な 404) をスローします。

デフォルトルート

受信リクエストが特定のルートを提供しない場合 (通常、これはホームページへのリクエストです)、 yiiwebApplication::defaultRoute 属性で指定されたデフォルト ルートが有効になります。このプロパティのデフォルト値は site/index で、サイト コントローラーのインデックス アクションを指します。次のように、アプリ構成でこのプロパティの値を調整できます:

リーリー

catchAll ルーティング (完全なインターセプト ルーティング)

すべてのリクエストで同じ情報ページが表示されるように、Web アプリケーションを一時的にメンテナンス モードにしたい場合があります。もちろん、これを達成する方法はたくさんあります。最も簡単かつ最速の方法は、アプリケーション設定で yiiwebApplication::catchAll 属性を設定することです:

リーリー

catchAll 属性は、配列でパラメーターとして渡す必要があります。配列の最初の要素はルートであり、残りの要素は操作にバインドされたパラメーターを (名前と値のペアの形式で) 指定します。

catchAll 属性が設定されている場合、受信リクエストから解析されたすべてのルートが置き換えられます。この設定では、すべての受信リクエストの処理に使用されるアクションは同じサイト/オフラインになります。

アクションを作成する

リクエストルートが決定したら、次のステップはルートに応答する「アクション」オブジェクトを作成することです。

ルートは内部のスラッシュを使用して複数のコンポーネント フラグメントに分割できます。たとえば、サイト/インデックスはサイトとインデックスの 2 つの部分に分解できます。各フラグメントは、モジュール、コントローラー、またはアクションを指す ID です。

ルートの最初のフラグメントから開始して、アプリケーションは次のプロセスを実行して、モジュール (存在する場合)、コントローラー、およびオペレーションを作成します。

    アプリケーション本体を現在のモジュールとして設定します。
  • 現在のモジュールの yiibaseModule::controllerMap に現在の ID が含まれているかどうかを確認します。その場合、テーブル内の設定に基づいてコントローラー オブジェクトが作成され、ステップ 5 に進んでルートの後続のフラグメントを実行します。
  • 現在のモジュールの yiibaseModule::modules 属性のモジュール リスト内のモジュールを ID が指しているかどうかを確認します。その場合、モジュール テーブルの構成に基づいてモジュール オブジェクトが作成され、新しく作成されたモジュールが環境として使用され、ステップ 2 に戻って次のルートを解析します。
  • この ID をコントローラー ID として扱い、コントローラー オブジェクトを作成します。次の手順を使用して、ルート内の残りのフラグメントを解析します。
  • コントローラーは yiibaseController::actions() で現在の ID を検索します。見つかった場合は、マッピング テーブル内の構成に基づいてアクション オブジェクトを作成します。それ以外の場合、コントローラーは、ID に対応し、アクション メソッドによって定義されたインライン アクションを作成しようとします。
上記の手順でエラーが発生すると、yiiwebNotFoundHttpException がスローされ、ルーティング ブート プロセスが失敗したことを示します。

興味があるかもしれない記事:

  • PHPのYiiフレームワークにおけるビヘイビアーの定義とバインディングメソッドの説明
  • PHPのYiiフレームワークにおけるビヘイビアビヘイビアの使用方法の詳細な説明
  • PHPのYiiフレームワークにおける属性の詳細な説明(プロパティ)
  • PHPのYiiフレームワークにおけるリクエストとレスポンスの処理フローの解釈
  • PHPのYiiフレームワークでのデータベース構成とSQL操作のサンプルチュートリアルの使用
  • PHPのYiiフレームワークでのエラーと例外の処理方法を説明する例
  • 関連するものを分析PHP の Yii フレームワークにおける Cookie とセッション関数の操作
  • PHP の Yii フレームワークのコンポーネント化メカニズムの基礎知識を簡単に分析
  • PHP の Yii フレームワークにおける YiiBase エントリ クラスの拡張記述メソッドの例
  • PHP の Yii フレームワークの詳細な分析
  • のイベントメカニズム PHPのYiiフレームワークのロギング関数の包括的な解釈
  • PHPのYiiフレームワークでコンポーネントにバインドされた動作を削除する方法

www.bkjia.com本当http://www.bkjia.com/PHPjc/1111324.html技術記事 PHP の Yii フレームワークとそのルーティング機能の動作メカニズムの詳細な説明と、Yii アプリケーションの動作メカニズムの概要について Yii アプリケーションは HTTP リクエストの処理を開始するたびに、おおよその処理を実行します。 ...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。