ホームページ > バックエンド開発 > PHPチュートリアル > PHP アプリのルーティング システムを最初から構築する方法

PHP アプリのルーティング システムを最初から構築する方法

PHP中文网
リリース: 2024-11-29 16:23:53
転載
284 人が閲覧しました

PHP 開発の旅の始まりにいる方は、 おそらく、URL 内で完全なファイル名を使用して、 アプリケーション (server/contact.php など)。心配しないでください、私たちは皆そうやって始めました、そしてそれが私たちの学習方法です。

今日は、ファイル内のファイルのナビゲーション方法を向上させるお手伝いをしたいと思います。 応用。ルーティングはどのような場合でも重要なので、ここではルーティングについて説明します。 現代のアプリケーション。あなたの一歩を踏み出すのに役立ちます プロフェッショナルな PHP 開発。

ルーティング システムは、HTTP をマッピングするだけです。 リクエストをリクエスト ハンドラ (関数またはメソッド) に送信します。言い換えれば、それは を使用せずにアプリのさまざまな部分に移動またはアクセスする方法を定義します。 ファイル名を入力する必要があります。これは、作成または設定することで実行できます。 ルート(またはパス)。たとえば、ルート サーバー/コンタクトを使用すると、contact.php ファイルにアクセスできます。

截屏2024-11-29 16.11.16.png

ルーティングの仕組み

まず最初に、内容を思い出させてください。ルーティングです。ルーティング アプリをより良い方法で構造化し、乱雑なものを取り除くことができます URL。これらは、優れたルーティング システムによって提供される 2 つの主な機能です。

  • 各受信リクエストに対して実行するアクションを定義します。
  • SEO に適した URL を生成します (例: /views/users の代わりにviews/user.php?all).

ルーティング システムを実行するには、ルータは、 エントリーファイルをアプリに追加します。デフォルトでは、このエントリ ファイルの名前は、index.php です。ファイル内では、[switch](https://www.php.net/manual/en/control-structions.switch.php) または [match](https://www.php.php) を使用してルーティング システムを定義します。 net/manual/en/control- Structures.match.php) ステートメント.

最後に重要なことですが、すべてのリクエストをルーターにリダイレクトする必要があります。これは、PHP サーバーの構成ファイルで行われます。

プロジェクトのセットアップ

次に進む前に、プロジェクトがどのようなものになるかを見てみましょう:

PHP アプリのルーティング システムを最初から構築する方法ファイル構造

以下のシェル コマンドを使用して、 project:

mkdir php-routing & cd php-routingtouch index.php .htaccess
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • .htaccess: ディレクトリレベルの Apache 設定ファイル。 NGINX サーバーを使用する場合は必要ありません。
  • index.php: これはルーターとプロジェクトのエントリ ファイルです。すべての受信リクエストはここにリダイレクトされます。
  • ビュー: このフォルダーにはプロジェクトのすべての UI が保持されます。

すべての HTTP リクエストをルーターにリダイレクトする方法

リダイレクトは PHP サーバーで行われると前述しました。 設定ファイル。したがって、次のことを行うかどうかに応じて、いくつかの調整を行う必要があります。 Apache または NGINX サーバーを使用します。

Apache を使用したリダイレクト

ここでは、プロジェクトのルートに既に作成した .htaccess ファイルを簡単に使用できます。以下のディレクティブを追加します:

mkdir php-routing & cd php-routingtouch index.php .htaccess
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
  • 行 1: Apache サーバーのランタイム書き換えエンジンをアクティブにします。
  • 行 2: 物理ファイルへのアクセスを制限します。
  • 行 3: 今後のリクエストをすべてリダイレクトします。 Index.php.

注: サイトまたはアプリがサーバーのルートにある場合 (または仮想ホストがない場合)、.htaccess は次のようになります。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
ログイン後にコピー
ログイン後にコピー

上記のコードで、/folder/ をサイトが含まれるフォルダーの名前に置き換えます。

使用したリダイレクトNGINX

デフォルトの構成ファイルの名前は nginx.conf です。このファイルは、etc/nginx、usr/local/nginx/conf、または /usr/local/etc/nginx にあります。

index.php にリダイレクトするには、以下のコマンドを使用します。

RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
ログイン後にコピー
ログイン後にコピー

場所/ブロックは、場所が明示的に指定されていない限り、すべての場所に一致することを指定します/.

try_files ディレクティブは、その場所のブロックに一致する URI へのリクエストについて、最初に $uri (または $uri/) を試行し、ファイルが存在する場合は、ファイルを提供します。それ以外の場合は、フォールバック オプション (index.php) が使用されます。そして、この最後の動作が私たちが望んでいることです。

変更後にサーバーをリロードします。

ルーティング システムの作成方法

これで、ルーティングがどのように機能するかがわかりました。すべてのリクエストを送信しても ルーターに。ここで、index.php にルーターのコードを記述します。

まず、HTTP リクエスト文字列を保持する変数を作成します。

location / {
        try_files $uri $uri/ /index.php}
ログイン後にコピー
ログイン後にコピー

この変数は比較に役立ちます。多くのルート (パス) を使用して、適切なビュー インターフェイスを呼び出します。

$request = $_SERVER['REQUEST_URI'];
ログイン後にコピー
ログイン後にコピー

ここで何が起こっているのでしょうか? switch ステートメントは、同じ式 (変数) に対する一連の if ステートメントに似ています。式が switch 式の値と一致する値に評価される case ステートメントが見つかった場合にのみ、コードが実行されます。これをわかりやすく説明しましょう。

変数が値 /views/users/ を保持していると考えてみましょう。上記のコードが実行されると、PHP は値 /views/users が case ステートメントの値 (この場合は /views/users) と等しいかどうかをチェックします。したがって、この条件は true と評価され、PHP はファイル /views/users.php を呼び出します。条件が false と評価された場合、PHP は switch ブロックの終わりまで次の case ステートメントをチェックします。

注: case ステートメントが true と評価されるたびに、PHP は次の case でコードを実行し続けます。これらの case ステートメントを必要とせずにステートメントを評価することができます。この場合、PHP には views/dep.php も必要です。この「悪い動作」を回避するには、各 case ステートメントの後に Break ステートメントを追加する必要があります。

次に、すべてをindex.php ファイルにまとめてみましょう。

mkdir php-routing & cd php-routingtouch index.php .htaccess
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

すでにご存知のとおり、ユーザー リクエストを $request 変数に保存することから始めて、それを switch ステートメントで使用します。コードをきれいにするために、ビュー ディレクトリ名を保持する変数を作成しました。

他にも 2 つの点にも注目してください:

  • '' と '/' の両方ユーザーがアプリまたは Web サイトのルートにいる場合に、site.com と site.com/ を照合するために使用されます。
  • 照合するための特別なケース ステートメント、default があります。他のケースで一致しなかったもの、つまりルートが不明な場合。

ビューにダミー データを追加しましょう。

ビュー ファイルにダミー データを追加します。

views ディレクトリにすべてのファイルがすでに作成されています。このディレクトリに移動して、各ファイルにコンテンツを追加しましょう。

各ファイルにコンテンツを追加します。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php
ログイン後にコピー
ログイン後にコピー
RewriteEngine On
RewriteBase /folder/
RewriteRule ^index\.php$ - [L]RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /folder/index.php [L]
ログイン後にコピー
ログイン後にコピー
location / {
        try_files $uri $uri/ /index.php}
ログイン後にコピー
ログイン後にコピー
$request = $_SERVER['REQUEST_URI'];
ログイン後にコピー
ログイン後にコピー

ご覧のとおり、各ファイルにはタイトルと段落だけが含まれています。好きなコンテンツを自由に追加して、ルーターをテストしてください。

最終的な考え

このチュートリアルでは、次のような基本的なルーティング システムを最初から作成する方法を学習しました。

  • プロジェクトのルートにindex.phpという名前のファイルを作成する方法。これはアプリのルーターです。
  • すべての受信リクエストをルーターにリダイレクトする方法。これは、サーバーの構成ファイルで行います。
  • ルーターで switch ステートメントを使用してルーティング システムを作成する方法。

以上がPHP アプリのルーティング システムを最初から構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:freecodecamp.org
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート