まえがき
記事が長くなってしまったので、別の記事に書きます。
前回の記事では以下の内容について説明させていただきました。
ルーティングの初期理解の簡単な分析 ルーティングを定義して外観について話しましょう ルーティング定義 ルール メソッドの $this->group は具体的に何をするのですか? ルーティング ルールの前処理 解析および生成のための迅速なアクセスルーティング識別子
しかし、ルーティングについてはまだ説明すべきことがたくさんあります。次に、次の内容を分析します。
- #ルーティング設定 (つまり、ルート ファイルの戻り値) #ディスパッチの最初の概要
- route-check は URL ルート
- を検出します。 。 。 。 。 。 。 。 。 。 。 。 。
- 以下、一つずつ詳しく説明していきます。
参考までに、ルーティングに関する実行図も示します。
この部分の内容は実行アプリケーション内にあります。次に、Kaka が簡単に説明します。
このセクションにはソース コードの説明はありません。ソース コードは記事の残りの部分への道を整えるためにのみ使用されるため、ディスパッチとは何なのかを理解する必要があります。
次の図は、ルーティングの初期化後に上位層に戻って実行を継続するプロセスを示しています。
これでルート検出が実行されます。
ルーティング テストは次のように使用されます
これで、このスケジュール情報を印刷できます
上の図では、ディスパッチに関する関連する値が出力されています#その後、
routeCheck メソッドの簡単なプレビューが表示されます
この部分のソース コードを見てみるだけでも構いません。それほど重要ではありません。
route-check URL ルーティングの検出ただし、この部分の内容については、まだ簡単に確認する必要があります。
これを見る前に、渡される 2 つのパラメーターが何であるかを明確にする必要があります。
パラメータ 1: ルーティング ルール パラメータ 2: 必須ルーティングが設定されているかどうかを確認します。
パラメータの意味を理解した後、チェック メソッドに進む必要があります。 。 探し出す。 この方法では、ドメイン名ルーティングの自動検出に関して、データがどのようなものかを出力してみましょう。 実際、返される結果は前のリソース ルーティング マウント方法と同じです。 その後、 pathinfo 区切り文字が渡される: URL の / を | に変更し、構成ファイルからルートを取得して完全に一致するかどうかを確認します。最終実行にはデフォルト ルートを使用します詳細はここで説明します。詳細な分析は省略します。ルーティングについては詳細が多すぎるため、1 つずつ詳細に注力すると、非常に時間がかかります。 したがって、このセクションの内容はここで終了します。最終的に何が実行され、何が返されるかを知る必要があるだけです。2. リクエスト クラスの検索方法
前のセクションの$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 はこれまでコンテナについて非常に深く理解しており、それを記事の形で皆さんに紹介しました。
#3. ドメイン名ルーティングの検出
#最初にプロセスを図示し、次にこれに従います。プロセスに合わせてステップ リズムをクリックするだけ。
最初に確認するのは、実行中のアプリケーションでドメイン名のルーティング検出が行われていることです。
上位の実行プロセスにはエントリ ファイルがあります。
まずコードが routeCheck
メソッド内で実行され、次にこのファイルを確認します。
最初にコメントを見てください。このメソッドの説明は URL ルーティングの検出です。
この方法では、まずルーティング キャッシュが検出されます。このコンテンツはキャッシュに関するものです。
このメソッドで最も重要なことは、ルーティングの検出であり、Dispatch オブジェクトを返すことです。
これがこのメソッドです。
次のステップでは、この方法を見ていきます。
最初に明確にする必要があるのは、渡される 2 つのパラメーターが何であるかです。
$パス : string(4) "ブログ" $must : bool(false)
URL ルーティングを検出すると、次のことが行われます。
- ##pathinfo 区切り文字: URL の / を |
- ルートが完全に一致するかどうかを確認します # #ドメイン名ルーティングの検出
- デフォルト ルート分析
- 次のステップは、ドメイン名ルーティング プロセスの詳細な分析を実行することです。
- セクション 6 の記事
-
$url: string(4) "blog" - $ completeMatch: ルーティングが完了したかどうか Match
- comes to $result = $domain->check($this->request, $url, $completeMatch);
この手法では、以下の処理が実行され、重要な実行処理が詳細に分析されます。
ルーティング エイリアスの検出: checkRouteAlias URL バインディングの検出: checkUrlBind -
ルーティング パラメーターの決定 ドメイン名ミドルウェアの追加 - ##グループ ルーティングの検出:parent::check
ルート エイリアスの検出: checkRouteAlias
パラメータの説明- $request: リクエスト クラスの例
- $url: 渡されたブログ
- strpos: 文字列内で最初に出現する位置を検索します。
- strstr: strstr は、string1 内で string2 が最初に出現する位置を指すポインターを返します。strstr( "Helloworld!","world");?>\n出力:\nworld!
- URL アドレスが最初に処理されます: ブログに戻る
- エイリアス ルート定義 NULL を取得します。
- リソース ルーティング ブログを例として、false を返します。
このメソッドについて最初に明確にしておきたいのは、このメソッドがクラス thinkphp/library/think にあることです。 /Route.php
中
そして、このクラスは think\route
の下にあるすべてのクラスを使用します。このメソッドは、検出からルーティングされたブログを取得し、それを alias 属性から取得します。 Route class 、存在しない場合は NULL が返されます
このエイリアスの使用方法については後述します
Come エイリアス ルートの最後の部分を検出しますreturn $item? $item->check($request, $url): false;
これがコード行です。上の図から、この項目は NULL
そして最終的にはこの NULL を返します。
#URL バインディングの検出: checkUrlBind
パラメータの説明- $request: リクエスト クラスのインスタンス
- $url: 渡されたブログ
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 クラスを継承しているためです。
$request: リクエスト クラスのインスタンス $url: 渡された blog $completeMatch : ルートが完全に一致するかどうか
このメソッドでは、Kaka は、ここでのプロセスの 1 つ、つまりグループ化パラメータのマージについてのみ詳しく説明します。
このメソッドは実行プロセス全体の本線でもあり、残りは検出と判断のためのメソッドであるためです。
ルーティングについて 2 回の記事を費やしましたが、まだ終わっていません。長い間ソースコードを読んできた結果、ルーティングが最も複雑で理解しにくいです。
クラスは1つずつリンクされているので、ここで一旦ルーティングを理解して、後から他のソースコードを読んだときに他の内容を追加していきます。
主にルーティング記事で実行されるフローチャートをよく読む必要があります。
主に、ルーティングにおけるドメイン名の設定プロセスと、ドメイン名が設定されるタイミングについて知っています。
ルーティング ファイル内の戻り配列と、ルーティング ファイルをインポートするプロセスについて明確に理解しておく必要があります。
それでは、前に学習した ArrayAccess を復習して、配列などのオブジェクトにアクセスしてみましょう。
コンテナ内のマジック メソッド __get メソッド このマジック メソッドには、主にクラスのインスタンスを返し、それをコンテナに格納するために使用される make メソッドがあります。
今回はルーティング面についてですが、1回の記事で終わる予定です。
“学習の継続、ブログの継続、共有の継続は、キャリア以来、カカが常に守ってきた信念です。Nuoda Internet でのカカの記事が少しでもお役に立てれば幸いです。少しお手伝いします。私はカカです。また次回お会いしましょう。
”
以上がThinkPHP は URL ルーティングの詳細な分析を検出しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、ThinkPHPの組み込みテストフレームワークについて説明し、ユニットや統合テストなどの主要な機能と、早期のバグ検出とコード品質の向上を通じてアプリケーションの信頼性を高める方法について強調しています。

記事では、リアルタイムの株式市場データフィードにThinkPhpを使用して、セットアップ、データの正確性、最適化、セキュリティ対策に焦点を当てて説明します。

この記事では、パフォーマンスの最適化、ステートレス設計、セキュリティに焦点を当てたサーバーレスアーキテクチャでThinkPhpを使用するための重要な考慮事項について説明します。コスト効率やスケーラビリティなどの利点を強調しますが、課題にも対処します

この記事では、セットアップ、ベストプラクティス、統合方法、および推奨ツールに焦点を当てたThinkPhpマイクロサービスにサービスの発見と負荷分散の実装について説明します。[159文字]。

ThinkPHPのIOCコンテナは、PHPアプリで効率的な依存関係管理のための怠zyなロード、コンテキストバインディング、メソッドインジェクションなどの高度な機能を提供します。

この記事では、ThinkPhpを使用してリアルタイムのコラボレーションツールを構築し、セットアップ、Websocket統合、セキュリティベストプラクティスに焦点を当てて説明します。

ThinkPhpは、軽量のデザイン、MVCアーキテクチャ、および拡張性を備えたSaaSアプリに利益をもたらします。スケーラビリティを向上させ、開発を速め、さまざまな機能を通じてセキュリティを改善します。

この記事では、ThinkPhpとRabbitMQを使用して分散タスクキューシステムの構築を概説し、インストール、構成、タスク管理、およびスケーラビリティに焦点を当てています。重要な問題には、Immedのような一般的な落とし穴を避けるための高可用性の確保が含まれます


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版
便利なJavaScript開発ツール
