Zuerst erstellen wir die Dateien index.php, router.php und .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
Dieser Code zeigt eine 404-Antwort an, wenn der Benutzer die URL für den direkten Zugriff auf router.php eingibt.
<?php if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) { http_response_code(404); die(); }
class Page { protected static bool $Return_404 = true; }
Erstellen Sie eine statische boolesche Variable für die Rückgabe der 404-Seite. Wir werden es standardmäßig auf „true“ setzen.
Jetzt fügen wir eine Funktion für die 404-Seite hinzu.
protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }
Hier habe ich eine 404-Seite in den Ordner „Pages“ eingefügt. Sie können es in einem beliebigen Ordner ablegen.
Wir werden auch die Funktion „Datei“ hinzufügen.
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; }
Diese Funktion prüft, ob die Anfrage-URL eine Abfragezeichenfolge enthält oder mit „/“ endet, und entfernt sie.
Ich verwende die String-Funktion „Strok“, um die String-Werte vor „?“ abzurufen. Ich weiß, dass „Strok“ nicht für diese Verwendung gedacht ist, aber es funktioniert und erspart mir unnötig komplexe Algorithmen. Ich verwende die Zeichenfolgenfunktion „rtrim“, um das „/“ zu entfernen, wenn es am Ende der Zeichenfolge enthalten ist.
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }
Hier erstelle ich ein statisches Array zum Speichern von Routings.
Dieses Array enthält „Angeforderte URL“ => „Dateispeicherort“.
Ich habe alle Seitendateien im Ordner „Pages“ abgelegt. Sie können sie überall platzieren, wo Sie möchten.
Die Router-Klasse wird eine Erweiterung der Page-Klasse sein, die wir oben bereits erstellt haben.
Beachten Sie, dass „“ => „Pages/home.php“ ist für die Startseite.
class Router extends Page { }
Jetzt schreiben wir die Funktion, die prüft, ob die angeforderte Datei in der Router-Klasse vorhanden ist.
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(); }
Diese Funktion überprüft zunächst, ob sich die angeforderte Datei im $Route-Array befindet. Wenn es vorhanden ist, wird der statische boolesche Wert $Return_404 auf „false“ gesetzt, sodass die 404-Seite nicht angezeigt wird und die Auslagerungsdatei nicht abgerufen wird. Wenn nicht vorhanden, wird die 404-Seite zurückgegeben.
Wenn es existiert, aber keine Datei im Pages-Ordner vorhanden ist, gibt die Funktion „Fehler“ zurück. Sie können hier die 404-Seite anstelle von echo „Error“ anzeigen.
<?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", ); }
In der index.php verwenden wir die Funktion „Run“ aus der Router-Klasse.
<!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>
Der gesamte HTML-Code der Seiten befindet sich im „body“-Tag.
Schließlich erstellen Sie home.php, about.php und 404.php im Ordner „Pages“.
home.php
<h1>Home page</h1>
about.php
<h1>about page</h1>
404.php
<h1>404 page</h1>
Überprüfen Sie, ob der Code mit der Erweiterung „xampp“ oder „PHP-Server“ funktioniert oder nicht.
Wenn Ihnen ein Fehler auffällt, teilen Sie mir dies bitte mit. XD
Sie können auch das Github-Repository überprüfen unter:
Das obige ist der detaillierte Inhalt vonErstellen eines einfachen Seitenrouters in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!