ファイルの作成
まず、index.php、router.php、.htaccess ファイルを作成します。
すべてのリクエストを .htaccess のindex.php にリダイレクトします。
1 2 3 4 | RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]
|
ログイン後にコピー
router.php への直接アクセスを防止する
ユーザーが router.php に直接アクセスするための URL を入力すると、このコードは 404 応答を表示します。
1 2 3 4 5 | <?php
if ( basename ( $_SERVER [ 'PHP_SELF' ]) == basename ( __FILE__ )) {
http_response_code(404);
die ();
}
|
ログイン後にコピー
router.phpにPageクラスを追加
1 2 3 4 | class Page
{
protected static bool $Return_404 = true;
}
|
ログイン後にコピー
404 ページを返すための静的ブール変数を作成します。デフォルトとして true に設定します。
次に、404 ページの関数を追加します。
1 2 3 4 | protected static function Return_404(): void
{
( file_exists ( "./Pages/404.php" )) ? require_once "./Pages/404.php" : http_response_code(404);
}
|
ログイン後にコピー
ここでは、Pages フォルダー内に 404 ページを配置します。任意のフォルダーに置くことができます。
「ファイル」機能も追加します。
1 2 3 4 5 6 7 8 | protected static function File(string $file ): string
{
if (! empty ( $file )) {
(str_contains( $file , "?" )) ? $file = strtok ( $file , '?' ) : $file ;
( $file [ strlen ( $file ) - 1] === "/" ) ? $file = rtrim( $file , "/" ) : $file ;
}
return $file ;
}
|
ログイン後にコピー
この関数は、リクエスト URL にクエリ文字列または「/」で終わるクエリ文字列が含まれているかどうかを確認し、それを削除します。
「strok」文字列関数を使用して、「?」より前の文字列値を取得します。 「strok」がこのように使用されることを意図していないことはわかっていますが、これは機能し、複雑なアルゴリズムを不必要に実行する必要がなくなります。 「rtrim」文字列関数を使用して、文字列の最後に「/」が含まれている場合はそれを削除します。
router.php に Routes クラスを追加します
1 2 3 4 5 6 7 | class Routes
{
public static array $Route = array (
"" => "Pages/home.php" ,
"/about" => "Pages/about.php" ,
);
}
|
ログイン後にコピー
ここでは、ルーティングを保存するための静的配列を作成します。
この配列には「リクエストされた URL」が含まれます => 「ファイルの場所」。
すべてのページ ファイルを Pages フォルダーに置きます。好きな場所に置くことができます。
router.php に Router クラスを追加します
Router クラスは、上ですでに作成した Page クラスを拡張します。
「」 => であることに注意してください。 「Pages/home.php」はホームページ用です。
1 2 3 4 | class Router extends Page
{
}
|
ログイン後にコピー
次に、要求されたファイルが Router クラスに存在するかどうかを確認する関数を作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static function Run(): void
{
$requested_file = self::File( $_SERVER [ "REQUEST_URI" ]);
foreach (Routes:: $Route as $request => $file ) {
if ( $requested_file === $request ) {
if ( file_exists ( $file )) {
self:: $Return_404 = false;
require $file ;
} else echo "Error" ;
}
}
if (self:: $Return_404 ) self::Return_404();
}
|
ログイン後にコピー
この関数は、要求されたファイルが $Route 配列内にあるかどうかを最初に確認します。存在する場合、静的ブール値 $Return_404 が false に設定されるため、404 ページは表示されず、ページ ファイルも取得されません。存在しない場合は、404 ページが返されます。
ファイルは存在するが、Pages フォルダーにファイルがない場合、関数は「エラー」をエコーします。ここで「エラー」をエコーする代わりに 404 ページを表示できます。
最終的な router.php ファイルは次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?php
if ( basename ( $_SERVER [ 'PHP_SELF' ]) == basename ( __FILE__ )) {
http_response_code(404);
die ();
}
class Page
{
protected static bool $Return_404 = true;
protected static function Return_404(): void
{
( file_exists ( "./Pages/404.php" )) ? require_once "./Pages/404.php" : http_response_code(404);
}
protected static function File(string $file ): string
{
if (! empty ( $file )) {
(str_contains( $file , "?" )) ? $file = strtok ( $file , '?' ) : $file ;
( $file [ strlen ( $file ) - 1] === "/" ) ? $file = rtrim( $file , "/" ) : $file ;
}
return $file ;
}
}
class Router extends Page
{
public static function Run(): void
{
$requested_file = self::File( $_SERVER [ "REQUEST_URI" ]);
foreach (Routes:: $Route as $request => $file ) {
if ( $requested_file === $request ) {
if ( file_exists ( $file )) {
self:: $Return_404 = false;
require $file ;
} else echo "Error" ;
}
}
if (self:: $Return_404 ) self::Return_404();
}
}
class Routes
{
public static array $Route = array (
"" => "Pages/home.php" ,
"/about" => "Pages/about.php" ,
);
}
|
ログイン後にコピー
インデックス.php
index.php では、Router クラスの「Run」関数を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!DOCTYPE html>
<html lang= "en" >
<?php
require_once "./router.php" ;
?>
<head>
<meta charset= "UTF-8" >
<meta name= "viewport" content= "width=device-width, initial-scale=1.0" >
<title>Router</title>
</head>
<body>
<?php
Router::Run();
?>
</body>
</html>
|
ログイン後にコピー
ページのすべての HTML コードは「body」タグ内にあります。
ページの作成
最後に、home.php、about.php、404.php を Pages フォルダーに作成します。
home.php
about.php
404.php
「xampp」または「PHP サーバー」拡張機能でコードが動作するかどうかを確認します。
エラーが発生した場合は、お気軽にお知らせください。 XD
次の場所で Github リポジトリを確認することもできます。
ときぎん
/
ページルーター
php-router リポジトリからの手動ルーター
以上がPHP で単純なページルーターを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。