ルーティングと URL 生成
YII アプリケーションがリクエストの処理を開始すると、最初に行うことは次のとおりです。リクエストされた URL をルートに変換します。ルーティングの役割は、リクエストを処理するために、その後、対応するコントローラーとオペレーションをインスタンス化することであり、処理プロセス全体をルーティングと呼びます。 (推奨学習: yiiフレームワーク)
ルーティングの逆のプロセスはURL生成と呼ばれ、指定されたrouを使用することを指します。 URL を生成するためのパラメータ情報。生成された URL を使用してリクエストを行うと、ルーティング処理プロセスはそれを再度解析し、元のルーティングおよびパラメータ情報を復元できます。
URL マネージャーは主にルーティングと URL 生成を担当し、アプリケーション コンポーネントとして登録されます。 URL マネージャーは、リクエストを解析し、ルーティングおよびパラメーター情報を解析するためのメソッド parseRequest() を提供します。
メソッド createUrl() は、指定されたルートとパラメーター情報から URL を生成するために使用されます。アプリケーション構成で URL マネージャーを構成すると、既存のプログラム コードを変更せずに、アプリケーションが任意の URL 形式を認識できるようになります。たとえば、次のコードを使用して URL を生成できます。
use yii\helpers\Url; // Url::to() calls UrlManager::createUrl() to create a URL $url = Url::to(['post/view', 'id' => 100]);
URL マネージャーの構成に応じて、上記のコードによって生成される URL は次のようになります。この URL がその後リクエストされると、元のルートと上記のパラメーター情報に解析されます。
/index.php?r=post/view&id=100 /index.php/post/100 /posts/100
URL 形式
URL マネージャーは、デフォルト URL 形式とプリティ URL 形式の 2 つの URL 形式をサポートします。デフォルトの URL 形式では、クエリ パラメータ r を使用してルートを渡し、他のパラメータは通常の方法で URL に配置されます。
たとえば、URL /index.php?r=post/view&id=100 には、post/view のルートと 100 のパラメータ ID があります。デフォルトの URL 形式では、URL マネージャーの構成は必要ありません。
美しい URL 形式では、エントリ スクリプト名の後に追加のパスを使用して、ルートと関連パラメーターを表示します。
たとえば、URL /index.php/post/100 の追加パスは /post/100、表示されるルートは post/view、パラメータ ID は 100 です。
この URL 形式を使用する場合は、実際のニーズに基づいて URL ルール セットを設計する必要があります。 URL マネージャーで属性 enablePrettyUrl の値を変更することで、これら 2 つの URL 形式を切り替えることができます。
ルーティング
ルーティングの作業は 2 つのステップに分けることができます:
1. ルートと関連パラメータを解析する;
2. ルートに基づいて応答を生成するコントローラー操作は、リクエストの処理に使用されます。
デフォルトの URL 形式を使用する場合、ルートの解析は非常に簡単で、パラメーター r の値を取得するだけです。
美しい URL 形式を使用する場合、URL マネージャーは URL を検出します。リクエストに一致するルートを見つけるために設定されたルール。一致するルールが見つからない場合は、例外 yii\web\NotFoundHttpException がスローされます。
リクエストからルートが解析されたら、次に行うことは、そのルートに関連付けられたコントローラー アクションを作成することです。ルートはいくつかの部分にスラッシュカットされます。たとえば、サイト/インデックスはサイトとインデックスに分割されます。
各部分は ID であり、モジュール、コントローラー、または操作を指す場合があります。ルートの最初の部分から開始して、モジュール (存在する場合)、コントローラー、およびアクションを作成するには、次の手順を実行する必要があります:
1. アプリケーション本体を現在のモジュールに設定します。
2. 現在のモジュールの yii\base\Module::controllerMap に現在の ID が含まれているかどうかを確認します。その場合、テーブル内の設定に基づいてコントローラー オブジェクトが作成され、ステップ 5 に進んでルートの後続のフラグメントを実行します。
3. ID が現在のモジュールの yii\base\Module::modules 属性のモジュール リスト内のモジュールを指しているかどうかを確認します。その場合、モジュール テーブルの構成に基づいてモジュール オブジェクトが作成され、新しく作成されたモジュールが環境として使用され、ステップ 2 に戻って次のルートを解析します。
4. この ID をコントローラー ID として扱い、コントローラー オブジェクトを作成します。次のステップを使用して、ルート内の残りのフラグメントを解析します。
5. コントローラーは、yii\base\Controller::actions() で現在の ID を検索します。見つかった場合は、マッピング テーブル内の設定に基づいてアクション オブジェクトを作成します。それ以外の場合、コントローラーは、ID に対応し、アクション メソッドで定義されたインライン アクションの作成を試みます。
上記の手順でエラーが発生した場合、アプリケーションは例外 yii\web\NotFoundHttpException をスローします。これは、ルーティング処理が失敗したことを意味します。
以上がyii フレームワークでルーティングを定義する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。