記事が長くなってしまったので、別の記事に書きます。
前回の記事では以下の内容について説明させていただきました。
しかし、ルーティングについてはまだ説明すべきことがたくさんあります。次に、次の内容を分析します。
参考までに、ルーティングに関する実行図も示します。
このセクションにはソース コードの説明はありません。ソース コードは記事の残りの部分への道を整えるためにのみ使用されるため、ディスパッチとは何なのかを理解する必要があります。
次の図は、ルーティングの初期化後に上位層に戻って実行を継続するプロセスを示しています。
これでルート検出が実行されます。
ルーティング テストは次のように使用されます
これで、このスケジュール情報を印刷できます
上の図では、ディスパッチに関する関連する値が出力されています#その後、
routeCheckメソッドの簡単なプレビューが表示されます
この部分のソース コードを見てみるだけでも構いません。それほど重要ではありません。
route-check URL ルーティングの検出ただし、この部分の内容については、まだ簡単に確認する必要があります。
これを見る前に、渡される 2 つのパラメーターが何であるかを明確にする必要があります。
パラメータ 1: ルーティング ルール パラメータ 2: 必須ルーティングが設定されているかどうかを確認します。
パラメータの意味を理解した後、チェック メソッドに進む必要があります。 。 探し出す。 この方法では、ドメイン名ルーティングの自動検出に関して、データがどのようなものかを出力してみましょう。 実際、返される結果は前のリソース ルーティング マウント方法と同じです。 その後、 pathinfo 区切り文字が渡される: URL の / を | に変更し、構成ファイルからルートを取得して完全に一致するかどうかを確認します。 最終実行にはデフォルト ルートを使用します 詳細はここで説明します。詳細な分析は省略します。ルーティングについては詳細が多すぎるため、1 つずつ詳細に注力すると、非常に時間がかかります。 したがって、このセクションの内容はここで終了します。最終的に何が実行され、何が返されるかを知る必要があるだけです。$result = $domain ->check($this->request, $url, $completeMatch);は、このブロックのコンテンツを実行します。
むしろ、$this->request
が見つかって実行されるかどうかに注意する必要があります。
最初にわかるのは、request 属性が Route クラスに存在することです。
次に、Route のコンストラクターに進み、そこで新しい世界を見つけます。
ここでは配列のようにオブジェクトにアクセスするために ArrayAccess を使用していますが、 $app には request 属性が存在しないため、コンテナクラスの __get マジックメソッドが実行されます。 make メソッドの最初のパラメータは request であり、最終的に request のインスタンスが返されます。
ここでの $app は、実際には、依存関係注入を通じて取得される App インスタンスです。
これだけソースコードを読んだら、App クラスがコンテナ クラスである Container クラスを継承していることを知らなければなりません。
コンテナ クラスの下部にはいくつかのマジック メソッドがあります。
ここでは __get メソッドにのみ注意する必要があります。
#__get メソッドは、存在しないプロパティにアクセスするときに実行される関数です。 つまり、最終的には make メソッドが実行されます。 このメソッドは一連の操作を経て、最終的に Request のインスタンスを返します。 そして、このインスタンスをコンテナーに保存すると、次回使用するときに直接取得できます。コンテナクラスのmakeメソッドについてですが、コンテナクラスの中でも特に重要なメソッドであり、魂のメソッドでもあります。
フレームワーク全体のインスタンスはコンテナーを通じて返されるため、このメソッドの重要性についてはこれ以上説明する必要はありません。
Kaka はこれまでコンテナについて非常に深く理解しており、それを記事の形で皆さんに紹介しました。
#最初にプロセスを図示し、次にこれに従います。プロセスに合わせてステップ リズムをクリックするだけ。
最初に確認するのは、実行中のアプリケーションでドメイン名のルーティング検出が行われていることです。
上位の実行プロセスにはエントリ ファイルがあります。
まずコードがrouteCheck
メソッド内で実行され、次にこのファイルを確認します。
最初にコメントを見てください。このメソッドの説明は URL ルーティングの検出です。
この方法では、まずルーティング キャッシュが検出されます。このコンテンツはキャッシュに関するものです。
このメソッドで最も重要なことは、ルーティングの検出であり、Dispatch オブジェクトを返すことです。
これがこのメソッドです。
次のステップでは、この方法を見ていきます。
最初に明確にする必要があるのは、渡される 2 つのパラメーターが何であるかです。
URL ルーティングを検出すると、次のことが行われます。
この手法では、以下の処理が実行され、重要な実行処理が詳細に分析されます。
ルート エイリアスの検出: checkRouteAlias
パラメータの説明このメソッドについて最初に明確にしておきたいのは、このメソッドがクラスthinkphp/library/think にあることです。 /Route.php
中
そして、このクラスは think\route
の下にあるすべてのクラスを使用します。このメソッドは、検出からルーティングされたブログを取得し、それを alias 属性から取得します。 Route class 、存在しない場合は NULL が返されます
このエイリアスの使用方法については後述します
Come エイリアス ルートの最後の部分を検出しますreturn $item? $item->check($request, $url): false;
これがコード行です。上の図から、この項目は NULL
そして最終的にはこの NULL を返します。
#URL バインディングの検出: checkUrlBind
パラメータの説明getBindルート バインディングにアクセスすると、Kaka が渡されたことがわかります。パラメータが出力されます。 。
このメソッドは、クラスthinkphp/library/think/route/Domain.php
にあります。このクラスは、$This->group でルーティング ルールを設定するときに使用されることに注意してください。わかりません。ルーティングの記事の最初のセクションを読むことができます。
同時に、このメソッドでは、subDomain
現在のサブドメイン名を取得します。
このメソッドは最終的に www を返します。主に最初の丸で囲まれた部分に注目してください。
リクエスト クラスのホスト メソッドを通じて現在のドメイン名を取得し、それを分割します。
戻りデータ: array(1) { [0] =>\n string(3) "www"\n}
サブドメイン名に値を割り当てます: $this-> ;subDomain
最終結果を返し、サブドメイン名を返します: www
その後、次の内容に戻ります。判断と取得が行われる上位層 WWW の現在のサブドメイン。
いくつかはすべて判定処理です。最初の判定は、www だけが返されるため、絶対に成立しません。
次の判定は、ルーティング バインディングに基づいています。知っておくだけで十分です。常に NULL が返されるということです。
最下層でNULLが返されることがわかっているので、ここでも判定が成立しないため、最終的な結果が返されます。上層 それは嘘です。
ルーティング パラメーターの決定
上の図によると、実行プロセスは最終的にthinkphp/library/think/route/Domain.php に戻ります。
このメソッドcheck
はドメイン名のルーティングを検出します。
次に、ルーティング パラメータの判断を開始します。
ルーティングパラメータがない場合はスキップされ、実行されません。
ルーティングパラメーターが存在します: setRouteVars メソッドを実行: ルーティング変数を設定します。このパラメーターはフレームワークのバージョン 5.1.5 以降でのみ使用できます。Kaka が使用しているバージョンは少し低いため、説明は省略します詳細。
ドメイン名ミドルウェアの追加
ミドルウェアについては、後ほど新しい記事で詳しく説明するのでここでは説明しませんが、今回は引き続きルーティングに焦点を当てます。グループ ルーティングの検出
次に、ドメイン名ルーティングを検出する最後のプロセスに進み、コードを実行しますreturnparent::check($request, $url , $completeMatch);
ファイル: thinkphp/library/think/route/RuleGroup.phpにジャンプします。これは、Domain クラスが RuleGroup クラスを継承しているためです。
このメソッドでは、Kaka は、ここでのプロセスの 1 つ、つまりグループ化パラメータのマージについてのみ詳しく説明します。
このメソッドは実行プロセス全体の本線でもあり、残りは検出と判断のためのメソッドであるためです。
クラスは1つずつリンクされているので、ここで一旦ルーティングを理解して、後から他のソースコードを読んだときに他の内容を追加していきます。
主にルーティング記事で実行されるフローチャートをよく読む必要があります。
主に、ルーティングにおけるドメイン名の設定プロセスと、ドメイン名が設定されるタイミングについて知っています。
ルーティング ファイル内の戻り配列と、ルーティング ファイルをインポートするプロセスについて明確に理解しておく必要があります。
それでは、前に学習した ArrayAccess を復習して、配列などのオブジェクトにアクセスしてみましょう。
コンテナ内のマジック メソッド __get メソッド このマジック メソッドには、主にクラスのインスタンスを返し、それをコンテナに格納するために使用される make メソッドがあります。
今回はルーティング面についてですが、1回の記事で終わる予定です。
“学習の継続、ブログの継続、共有の継続は、キャリア以来、カカが常に守ってきた信念です。Nuoda Internet でのカカの記事が少しでもお役に立てれば幸いです。少しお手伝いします。私はカカです。また次回お会いしましょう。
”
以上がThinkPHP は URL ルーティングの詳細な分析を検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。