#“この記事ではルーティングのソースコードの解説が続きます。この記事をご覧になった方は、まず以前に書いたルーティングの記事、計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) "\/\-\/" として返されます。ここで、すべてのバックスラッシュはエスケープ文字です。 <p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">preg_replace 関数は正規表現で文字列を区切ります。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">strncasecmp() 関数は 2 つの文字列を比較します (大文字と小文字は区別されません)。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">preg_match_all 関数は、グローバル正規表現マッチングを実行するために使用されます。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">preg_match_all 関数は、グローバル正規表現マッチングを実行するために使用されます。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">このメソッドには、ほとんどの人にはあまり馴染みのない関数がいくつかあります。情報は自分で確認するしかなく、Kaka はこれらのメソッドの使用法については説明しません。 </p>
<h1 data-tool="mdnice编辑器" style="margin-top: 30px; margin-bottom: 15px; padding: 0px; color: black; border-top: 2px solid rgb(248, 57, 41); text-align: center; font-size: 1.3em;">
<span class="prefix" style="display: none;"></span><span class="content" style="display: inline-block; font-weight: normal; background: rgb(248, 57, 41); color: #ffffff; padding: 3px 10px 1px; border-radius: 0 0 13px 13px;">概要</span><span class="suffix"></span>
</h1>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">上記は、URL変数とルールルートが一致するかどうかを検出する内容です。このブロックの機能は次のとおりです。いくつかの側面について話しましょう。 </p>
<ul data-tool="mdnice编辑器" style="margin-top: 8px; margin-bottom: 8px; padding-left: 25px; color: rgb(248, 57, 41);">
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">ルートが完全に一致するかどうかを確認するには、complete_match パラメータを使用します。 </section></li>
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">マージ ルーティング ルール (パターンの使用)。 </section></li>
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">最も重要なことは、次の部分がアドレスに対してさまざまな関数処理を実行することです。 </section></li>
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">最終的な戻り値は、ルーティング パラメーターの配列の形式になります。 </section></li>
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">上記はルーティングパラメータが存在する場合ですが、ルーティングパラメータが存在しない場合は、そのまま false を返します。 </section></li>
<li><section style="margin-top: 5px; margin-bottom: 5px; line-height: 26px; color: rgb(53, 53, 53);">次に、戻って、ここで一致したルール ルーティングの解析を実行します。 </section></li>
</ul>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;"> ここではフローチャートを省略します。Kaka が提供するコード デバッグ ツールに従ってデバッグすることも、上記の Kaka が提供するガイドを参照することもできます。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">ルーティングがまもなく終了します。最後に残っている内容は、ルーティングのスケジューリング、ルーティングのスケジュール方法、最終的なルーティングの実行結果を誰に返すかです。これらはすべて面倒な質問です。次に、[Ka ] をクリックしてください。ルーティング スケジューリングの詳細な分析を提供します。 </p>
<p data-tool="mdnice编辑器" style="padding-top: 8px; padding-bottom: 8px; line-height: 1.75; margin-top: 0.8em; margin-bottom: 0.8em;">この記事は、主にルーティング パラメータ、ルーティング変数、およびルールの検出に焦点を当てています。この内容は、以前の記事と合わせて読む必要があります。PHP 中国語 Web ページに連載記事があります。興味のある方は、返品可能です ぜひチェックしてみてください! </p>
<blockquote class="multiquote-1" data-tool="mdnice编辑器" style="border: none; font-size: 0.9em; overflow: auto; margin-bottom: 20px; margin-top: 20px; padding: 15px 10px; line-height: 1.75; border-radius: 13px; color: rgb(53, 53, 53); background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial;">
<span style="display: block; font-size: 2em; color: rgb(248, 57, 41); font-family: Arial, serif; line-height: 1em; font-weight: 700;">「</span><p style="padding-top: 8px; padding-bottom: 8px; line-height: 26px; font-size: 16px; margin: 0px 10px;">学習への粘り強さ、ブログへの粘り強さ、そして共有への粘り強さは、カカがそのキャリア以来、常に堅持してきた信念です。私は、カカの記事が巨大なインターネットに掲載されることを願っています」少しだけ持ってきてください。助けてください。私の名前はカカです。また次回お会いしましょう。</p>
<span style="float: right; display: block; font-size: 2em; color: rgb(248, 57, 41); font-family: Arial, serif; line-height: 1em; font-weight: 700;">"</span>
</blockquote>
以上がThinkPHP は URL 変数とルールルーティングが一致するかどうかを検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。