ThinkPHP は URL ルーティングの詳細な分析を検出します
まえがき
記事が長くなってしまったので、別の記事に書きます。
前回の記事では以下の内容について説明させていただきました。
ルーティングの初期理解の簡単な分析 ルーティングを定義して外観について話しましょう ルーティング定義 ルール メソッドの $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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ThinkPHP プロジェクトを実行するには、Composer をインストールし、Composer を使用してプロジェクトを作成し、プロジェクト ディレクトリに入り、php bin/consoleserve を実行し、http://localhost:8000 にアクセスしてようこそページを表示する必要があります。

ThinkPHP には、さまざまな PHP バージョン向けに設計された複数のバージョンがあります。メジャー バージョンには 3.2、5.0、5.1、および 6.0 が含まれますが、マイナー バージョンはバグを修正し、新機能を提供するために使用されます。最新の安定バージョンは ThinkPHP 6.0.16 です。バージョンを選択するときは、PHP バージョン、機能要件、コミュニティ サポートを考慮してください。最高のパフォーマンスとサポートを得るには、最新の安定バージョンを使用することをお勧めします。

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

Laravel フレームワークと ThinkPHP フレームワークのパフォーマンスの比較: ThinkPHP は、最適化とキャッシュに重点を置いて、一般に Laravel よりもパフォーマンスが優れています。 Laravel は優れたパフォーマンスを発揮しますが、複雑なアプリケーションの場合は、ThinkPHP の方が適している可能性があります。

「開発に関する提案: ThinkPHP フレームワークを使用して非同期タスクを実装する方法」 インターネット技術の急速な発展に伴い、Web アプリケーションには、多数の同時リクエストと複雑なビジネス ロジックを処理するための要件がますます高まっています。システムのパフォーマンスとユーザー エクスペリエンスを向上させるために、開発者は多くの場合、電子メールの送信、ファイルのアップロードの処理、レポートの生成など、時間のかかる操作を実行するために非同期タスクの使用を検討します。 PHP の分野では、人気のある開発フレームワークとして ThinkPHP フレームワークが、非同期タスクを実装するための便利な方法をいくつか提供しています。

ThinkPHP のインストール手順: PHP、Composer、および MySQL 環境を準備します。 Composer を使用してプロジェクトを作成します。 ThinkPHP フレームワークと依存関係をインストールします。データベース接続を構成します。アプリケーションコードを生成します。アプリケーションを起動し、http://localhost:8000 にアクセスします。

ThinkPHP は、キャッシュ メカニズム、コードの最適化、並列処理、データベースの最適化などの利点を備えた高性能 PHP フレームワークです。公式パフォーマンステストでは、1秒あたり10,000以上のリクエストを処理できることが示されており、実際のアプリケーションではJD.comやCtripなどの大規模なWebサイトやエンタープライズシステムで広く使用されています。

ThinkPHP6 と Swoole をベースとした RPC サービスがファイル転送機能を実装 はじめに: インターネットの発展に伴い、ファイル転送は私たちの日常業務においてますます重要になってきています。この記事では、ファイル転送の効率化とセキュリティを向上させるために、ThinkPHP6とSwooleをベースとしたファイル転送機能を実現するRPCサービスの具体的な実装方法を紹介します。 WebフレームワークとしてThinkPHP6を使用し、SwooleのRPC機能を利用してサーバー間のファイル転送を実現します。 1. 環境基準
