“ ルーティングはプロジェクト開発における重要なリンクです。すべてのプロジェクトはルーティングを使用してインターフェイスを管理します。次に、この記事ではソース コードからルーティングを学習します。
”
#1. ルーティングパラメータと変数ルール
##最初に同じコードを開始ただし、今回はルーティング パラメータと変数ルールに焦点を当てます。 これら 2 つのポイントは、使用方法と簡単な実行プロセスを簡単に説明するためのものです。 これら 2 つの点は通常の開発プロセスではあまり使用されないため、より深く理解するために説明は省略します。
ルーティング ルールを登録します ファイル thinkphp/library/think/route/RuleItem.php にあることを覚えておいてください。ルーティングパラメータの使用を見たことがありますか?
ルーティング パラメータの処理についてまた、このドキュメントでは、以下に示すように、サポートされている多くのパラメータも提供します。
ドキュメントでサポートされているパラメータ
このルーティング パラメータの使用方法!
次に、前に使用したルートを使用し、複数のサフィックスの一致をサポートするように URL サフィックス検出を設定します。
ルーティングのケースでは、設定したルートにどのようにアクセスすればよいでしょうか。
通常のルーティングルールに従ってアクセスするとエラーが報告されますので、正しいアクセス方法を読み続けてください。
結果へのアクセス正しいリクエスト アドレスは http://www.source.com/index.php/hello/1 である必要があります。 html
、つまり、設定したサフィックス html をリクエスト アドレスに接続する必要があります。
結果へのアクセスこのブロックの具体的な実行プロセスは、コード トラッカーを使用して簡単に確認できますが、Kaka はここでは説明しません。
ルーティングパラメータについては、ここで事例を紹介して、基本的には終わりです。
グローバル ルーティング パラメータ
ルーティング パラメータの最後の説明は、グローバル ルーティング パラメータです。
ドキュメントに直接アクセスして確認してください。
グローバル ルーティング パラメーターここで、Kaka はテスト用に 2 つのルーティング ルールを設定します。1 つのパラメーターはオプションで、もう 1 つは必須であり、ルーティング ルールはファイルを追加するように設定されています。接尾辞。
ルーティング ファイルパラメータを渡すときのリクエスト アドレス。
#アクセス結果パラメータを渡さずにアドレスを要求します。
アクセス結果上記はルーティングパラメータの記述内容です。 特に詳しい説明はなく、簡単に使い方を説明するだけで、こういうものがあるので理解するだけで十分です。
変数ルール
同じ変数ルールですが、Kaka の日常の開発作業ではさらに利用できません。 変数ルール Kaka は、パラメータをフィルタリングすることが唯一の利点であると考えています。 つまり、変数ルールは、ルーティング ルールにパラメータがある場合にのみ存在する動作です。 カカ ここで簡単なケースを紹介します。 デモケース
ルーティング ファイルのデモ ケース
ルートの後にパラメーターを追加パターン
次に、これを記述する方法を見てみましょう。リクエスト 。
パラメータが数値の場合、入力されたパラメータを出力できます。
初めてアドレスをリクエストする場合ただし、文字が渡されるとエラーが報告されます。
結果の印刷したがって、変数ルールは、ルーティング ルールの後にパラメータをフィルタリングすることであり、通常のルールを使用して処理されます。
これまでは、ルーティング パラメータと変数ルールについて簡単に説明しました。
内容は非常にシンプルですが、使い方を紹介するユースケースがほとんどで、ソースコードを深く検討することはありません。
まず第一に、私は日常の開発中にこれを使用することはほとんどありません。
2 番目に、次の記事でさらに詳しく理解する必要があります。ここでは一般的な理解を示します。
実際のところ、ルーティング アドレスを入力すると内部コンテンツが表示される理由をまだ理解していない人が多いと思われますが、これについては後ほど詳しく説明します。
2. リソースルーティング
リソースルーティングの設定も非常に簡単です。
ルーティング ファイルコマンド ラインを使用してファイルを作成するのも便利です。
コマンドを使用してファイルを作成する作成したコントローラー自体がリソース ルーティング ファイルです。
リソース ルーティング コントローラーその後、Route ファイルのリソース メソッドは引き続き実行されます。
このメソッドには、ルーティング ルール、ルーティング アドレス、ルーティング パラメータ、および変数ルールも含まれます。
リソース ルーティングの登録次に、thinkphp/library/think/route/Resource.php
Class
に移動します。 このクラスでいくつかの簡単な属性の割り当てを時間内に実行します。
次に、カカさんが丸で囲った場所があります。次に、カカさんが丸で囲った場所について説明します。
thinkphp/library/think/route/Resource.phpリソースクラスは RuleGroup クラスを継承しているため、thinkphp/library/think にジャンプします。 /route/RuleGroup.php クラス。
このメソッドによって実行されるアクションに進みます。
- ルーティング ルールは単純に処理されます。ルートにパラメータがある場合は、ルーティング ルールを
blog/<name> または blog/<name> </name></name>
- 次のステップは、$this->parent について説明することです。なぜここに
object(think\route\Domain)
があるのか、最初の記事です。ルーティング アーティクルのセクション 3 が必要です。このステップでは、fullName に値が割り当てられます。
- 最後のステップは、値を fullName に割り当てることです。実際には、ルーティング ルールを fullName に割り当てます。
グループのルーティング ルールを設定します。次に、上位層に戻って次の作業を確認します。
上のファイルに戻ってソース コードを読み続けますグループ ルーティング ルールを設定した後、主に次のいくつかの属性に値を割り当てます。三つ。
- #ルーティング変数ルール
- ルーティング パラメータ
- REST ルーティング メソッド定義
属性の割り当てについては何も言う必要はありません。対応する属性が何を行うかを理解する必要があるだけです。 次のステップでは、リクエスト メソッドをキー値として、$this を値として使用して、このクラスのインスタンスを返し、このルーティング メソッドがアノテーション ルーティングであるかどうかを検出します。 返された結果は、誰でも簡単に確認できるように出力されます。内容は傍受されていないため、値が何であるかを知る必要があるだけです。
結果を返す上記の実行後、上位層に戻って遅延メソッドを実行します
まず渡されたパラメータが何なのかを知る: ルートの解析が遅れているかどうか
実行後に上位層に戻るコード次に、遅延メソッド
#遅延メソッド##このメソッドでは、parseGroupRule が呼び出され、渡されるパラメータはグループのルーティング ルールです このセクションの内容はルーティング グループ化に関するものであるため、ここでは説明しません。
グループ ルーティング ルール
これまで、リソース ルーティングについて簡単に説明しました。最後に、Kaka が実行頭脳を提供します。
#リソース理由実行処理![1606795152447367.png ThinkPHP ルーティング パラメーターとリソース ルーティング分析](https://img.php.cn/upload/image/290/677/793/1606795152447367.png)
3. ドメイン名の設定時期について 実際には、前のセクションに次のようなコード行があります$this->parent->getDomain()
このコード行はメソッド名に基づいています
が要求されたドメイン名を取得することは誰もが知っていますが、このドメイン名がどこに設定されているか知っていますか? このリソース ルートをリクエストすると、Route クラスのコンストラクターが実行されます
#リソース ルーティング#コンストラクターには、要求されたドメイン名を取得するためのコード行があります
# #Constructor
ホスト メソッドが表示されますホスト メソッドでは、このパラメーターは trueですここだけ注意する必要があります$ this->server(' HTTP_HOST')
で十分です。ドメイン名アドレス を取得するために使用されます。Kaka で囲まれた 2 番目の場所に表示されます。最初の条件が確立されています。ただし、2 番目の条件が成立していないため、
$this->host
host メソッドに直接戻ります。
## 前の手順で取得した #Print$this->host
ですが、なぜ 2 回実行されるのかについては説明しません。ご不明な点がございましたら、関数を使用してください。 debug_backtrace を確認してください。 #印刷結果
デフォルトのドメイン名を初期化するメソッドがすぐに実行されます
つまり、ここでドメイン名が初期化されます![1606795176886750.png ThinkPHP ルーティング パラメーターとリソース ルーティング分析](https://img.php.cn/upload/image/839/327/807/1606795176886750.png)
デフォルトのドメイン名メソッドの初期化この時点でもまだ疑問がありますが、それは明らかに thinkphp/library/think/route/Resource です。 php
クラス内で実行されます。
ドメイン名アドレスの設定はクラス thinkphp/library/think/Route.php
にあります!
これは考えてみればすぐにわかりますが、それは相続関係によるものです!
thinkphp/library/think/route/Resource.phpこの時点では、このドメイン名の設定は非常に明確になっているはずです。わかりません。Kaka が書いた記事をもっと読んでください。
カカ 記事を書くのに数時間かかりますが、読むのに数分しかかかりません。数分で何が読めるでしょうか?
時間をかけてコードを作成してください。必要なのは効率ではなく品質です。
ここまででドメイン名を設定する場合の説明が終わりましたので、次にルーティング構成・アレイ構成について説明します
4. ルーティング構成- 配列構成の解釈
実際、これを読んで混乱する人も多いと予想されます。
ほとんどの人は、これが何を意味するのか、これがどこにあるのかを理解していません。
実際、この構成は 5.1 以降でのみ利用可能です。この構成は、Kaka の以前のバージョンには存在しません。
この構成の場所は、実際に調査してきたルート内にあります。予想外でした。それだけ強力なのです。
は、ルーティング設定の戻り値です。
ルーティング設定ファイル ルーティング ファイルの読み込みを確認してみましょう。
最初はエントリーファイルですが、これについては間違いありません。
丸で囲ったところがAppのインスタンスを返します。わからない場合はコンテナに関する記事を読んでください。
したがって、このコード行は App クラスの run メソッドに対して実行されます。
エントリー ファイル次に、thinkphp/library/think/App.php
に移動し、次の run メソッドを見てください。このクラス。
直接表示されるのは、初期化アプリケーションです。
#初期化アプリケーション初期化アプリケーションにアクセスすると、ルートの初期化について確認できます
ルート初期化routeInitメソッド#ルーティング設定をインポートする際に、ルーティング設定ファイルの配列構成に基づいて判定が行われます。
ルーティング構成のインポートこの時点で、ルーティング構成がいつロードされるかをある程度理解しているはずです。 しかし、この文書にはアレイ モードでのルーティングの構成についての記述はありません。つまり、使用例がありません。
したがって、import
メソッドに従って追跡する必要があります。
使い方を調べてください。
ここで、Kaka はコード行 $this->route->import($rules);
について説明しています。
実際、$this->route
なぜ Route クラスが実行できるのでしょうか。
まず最初に知っておく必要があるのは、App クラスが Container クラスを継承しているということです。 Container クラスの終わり いくつかのマジック メソッドが存在します。
コンテナ マジック メソッドこの __get マジック メソッドは、アプリ内で存在しない Route クラスが呼び出されたときに実行されます。
次に、__get マジック メソッド内の make メソッドが実行されます。
この方法については、Kaka が 3 回以上述べています。コンテナに関する記事を読むことができます。 コンテナ クラスの make メソッド
その後、行進を続けて、
thinkphp/library/think/Route.php に到達します。構成ファイルのルーティング ルールをインポートします (メソッド
import)このメソッドでは、いくつかのよく知られた変数ルールを確認できます。
次に、これらの値を簡単なテストに使用します。
インポートされた構成ファイルを検出します。ルール2 番目のセクションでリソース ルーティングについて説明しました。次に、リソース ルーティングのチェックを条件としてテストします。
以前に設定したリソースを必ず設定してください。ルーティング構成が変更されます。オフにすると、テストは実行できません
ルーティング設定ファイルこの時点で、アクセスを行います
はい、つまりこの方法では、非常に簡単に使用できます。
#アクセス結果 #実際、配列メソッドの構成ルーティングはリソース ルーティングと同じですが、実行順序 以上です最終的に、ルーティング ルールはループを通じてリソース メソッドに渡されます
リソースが実行されます
このメソッドも実行されます
リソース メソッド
このセクションではここで簡単に説明します。重要なのは、一定の理解が必要であるということです。ルートの初期化の説明そしてルーティング配列の使い方を学ぶメソッドの構成
このメソッドは、以前のバージョン 5.1 やリリースされたバージョン 6.0 ではあまり使用されませんでした。全く使われない
ここで言及したのは、ルーティングの初期化プロセスを確認し、アレイ構成のルーティングが何を行うのかを知るためです。
質問がある場合は、未解決のままにせずに解決する必要があります
以上がThinkPHP ルーティング パラメーターとリソース ルーティング分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。