#“ この記事ではルーティングのソースコードの解説が続きます。この記事をご覧になった方は、まず以前に書いたルーティングの記事、計2記事を読むことができます。 "
thinkphp/library/think/App.php
->
$dispatch = $this->route->check($path, $must);
thinkphp/library/think/Route。 php
->
$result = $domain->check($this->request, $url, $completeMatch);
thinkphp/library/think /route/Domain.php
->
$result = $this->checkRouteAlias($request, $url);
->
returnparent::check($request, $url, $completeMatch);
thinkphp/library/think/route/RuleGroup.php
->
$this->mergeGroupOptions();
对应実行系:
次のことができます。これを参照してください。このセクションのタイトルは「ルーティング パラメータの検出とパケット ルーティングの確認」であるため、ルーティングの検出に関する内容はまだ多くあります。
Kaka は、グループ パラメーターのマージとグループ ルーティングのチェックにのみ焦点を当てているだけであり、最後に、その他の内容は行全体に浸透していないため、これについては詳しく説明しません。
次の記事ではコントローラーの一部について説明しますが、すべてを書くわけではありません。
グループ化パラメーターのマージ
まず、この部分の内容について説明します。
このコンテンツを確認する前に、$this->parent
属性を確認する必要があります。 「この値は何に設定されていますか?」を参照してください。
debug_backtrace() で出力すると、それが Domain のインスタンス化されたクラスであることがわかります。
次に、mergeGroupOptions
メソッドの詳細な説明に進みます。
最終的な戻り結果
通常の状況では、ルーティング パラメータは使用しません。ここでは、ルーティング パラメータが存在することを全員に知らせるためにのみ言及します。どうしても使用する場合は、必ずバージョン番号を明確に読んでください。そうしないと、A が発生します。たくさんのトラブル。
グループ ルーティングの確認ファイル: thinkphp/library/think/route/RuleGroup .php 183行目。
ここでは、まず変数 $rules の値が何であるかを明確にする必要があります。
最初のケースはリソース ルーティングではありません。
2 番目のケースはリソース ルーティングです。
これは、Kaka がルーティング ファイルに 2 つのルート (1 つのリソース ルートと 1 つの非リソース ルート) のみを設定しているためです。
上図の丸で囲んだデータによると、$item の値が次の 2 つの状況に分かれていることがわかります。ループが実行されます。
think\route\Resource オブジェクトの check メソッドを実行します。
think\route\RuleItem を実行します。 Object の check メソッド
アーティファクトの印刷結果によると、リソースのルーティング時にも実行されることがわかりますthinkphp/library/think/route /RuleGroup.php
クラスのチェックメソッド。
リソース ルーティングで thinkphp/library/think/route/RuleGroup.php
のチェックが実行される理由Resource クラスは RuleGroup クラスを継承しているためです。
そして、$item
の値はResource
クラスのインスタンスであるため、check メソッドが実行されます。
それでは、アーティファクトを持つことがいかに重要であるかということです。前の記事で、このアーティファクトの使用方法について詳しく説明しました。まだ使用方法がわからない、またはよくわからない場合は、使い方、ぜひチェックしてみてください!アーティファクトはコードの実行フローを直接出力できるため、ソース コードのデバッグ プロセスで非常に役立ちます。
check
メソッドを再度実行すると、次の図の丸で囲まれた最終結果が返されます。
非リソース ルーティング実行チェック
ファイル: thinkphp/library/think/ Route /RuleItem.php 行番号 231 非リソースルーティングを実行するメソッドです。
ルーティングルール検出メソッドを入力した後も、ルーティングパラメータはマージされます。
ルーティング パラメータを結合する方法については上で説明したので、ここでは詳しく説明しません。
ここまでで、検出ルーティングでのグループ パラメータのマージとグループ ルーティングの確認についての説明を終了しました。 , マインドマップを見ることができます。
次のケースでは、通常のルーティングが使用され、リソースは使用されません。ルーティングの場合、ファイルthinkphp/library/think/route/RuleItem.php
はアーティファクトを使用してデータを出力します。
上記は実行プロセス全体であり、以下は続きます。 URL とルール ルーティングが一致するかどうかを確認するために解析する必要があるコンテンツです。 ここでコンテンツを開始する前に、Kaka に関する問題を解決しましょう。 上記のコードの上位層に移動し、返された結果を出力します。次に、ルーティング構成ファイルroute.phpを見てみましょう。
このファイルでは、Kaka は 2 つのルーティング アドレスのみを構成し、そのうちの 1 つだけがリソース ルートであり、変数ルールが設定されています。
このとき、ルーティング設定ファイルにルーティングアドレスを追加します。
次に、記事の冒頭に結果を出力します。
なぜ false が返されるのかについて質問はありますか?
URL とルール ルートが一致するかどうかを確認すると返される理由の解決策false
次に、ソースポイントに行って確認する必要があります。
このセクションの内容は上で説明されています。この項目には 2 つの状況があります。1 つ目はthink\route\Resource Object
の実行で、2 つ目はExecute think\route\RuleItem オブジェクト
。
はすべて check メソッドを実行します。
ファイルを実行する必要があることは明らかですthinkphp/library/think/route/ RuleItem.php
のcheck
が返されます。
これら 2 行のコードに基づいて、$match 変数が関連している必要があることがわかります。
この変数は、URL とルール ルーティングが一致するかどうかを検出するために使用されます。これは最初に述べた内容に戻ります。
ソース コードは次のようになります。リンクごとにリンクしていきます。ゆっくり読んでください。さらに読むと理解できるようになります。
コードの解析を正式に開始します
パラメータの説明
まず、ルートが完全に一致するかどうかの判定が行われますが、ルートを解釈する過程で、このような判定が多数出てきました。なぜ判断が必要なのかについては、別の記事で説明する予定です。
次に、ルーティング ルールをマージするコードが実行され、このプロセスによりルーティング ルールがマージされます。
getPattern メソッドに戻ります。ルーティング ルールが設定されていないため、直接戻ります。ルーティング ルールのこの変数の初期値は空の配列であるため、マージ後も空の配列のままです。
コードの 2 行目、具体的に何が実行されるかについて質問があるかどうかはわかりません。
依存関係の注入は、このクラスのコンストラクターで実行され、 // ルーティング インスタンス: think\Route が注入されます。
コードによる追跡は、構成情報から構成情報を取得することであり、返される結果はstring(1) "/"
So 最後に、スラッシュ変数は
string(6) "\/\-\/"として返されます。ここで、すべてのバックスラッシュはエスケープ文字です。 preg_replace 関数は正規表現で文字列を区切ります。 strncasecmp() 関数は 2 つの文字列を比較します (大文字と小文字は区別されません)。 preg_match_all 関数は、グローバル正規表現マッチングを実行するために使用されます。 preg_match_all 関数は、グローバル正規表現マッチングを実行するために使用されます。 このメソッドには、ほとんどの人にはあまり馴染みのない関数がいくつかあります。情報は自分で確認するしかなく、Kaka はこれらのメソッドの使用法については説明しません。 上記は、URL変数とルールルートが一致するかどうかを検出する内容です。このブロックの機能は次のとおりです。いくつかの側面について話しましょう。 ここではフローチャートを省略します。Kaka が提供するコード デバッグ ツールに従ってデバッグすることも、上記の Kaka が提供するガイドを参照することもできます。 ルーティングがまもなく終了します。最後に残っている内容は、ルーティングのスケジューリング、ルーティングのスケジュール方法、最終的なルーティングの実行結果を誰に返すかです。これらはすべて面倒な質問です。次に、[Ka ] をクリックしてください。ルーティング スケジューリングの詳細な分析を提供します。 この記事は、主にルーティング パラメータ、ルーティング変数、およびルールの検出に焦点を当てています。この内容は、以前の記事と合わせて読む必要があります。PHP 中国語 Web ページに連載記事があります。興味のある方は、返品可能です ぜひチェックしてみてください! 学習への粘り強さ、ブログへの粘り強さ、そして共有への粘り強さは、カカがそのキャリア以来、常に堅持してきた信念です。私は、カカの記事が巨大なインターネットに掲載されることを願っています」少しだけ持ってきてください。助けてください。私の名前はカカです。また次回お会いしましょう。 概要
「
以上がThinkPHP は URL 変数とルールルーティングが一致するかどうかを検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。