Heim >Backend-Entwicklung >PHP-Tutorial >Erstellen eines einfachen Seitenrouters in PHP

Erstellen eines einfachen Seitenrouters in PHP

DDD
DDDOriginal
2024-09-18 20:22:19461Durchsuche

Dateien erstellen

Zuerst erstellen wir die Dateien index.php, router.php und .htaccess.

Leiten Sie alle Anfragen an index.php in .htaccess um

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]

Direkten Zugriff für router.php verhindern

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();
}

Fügen Sie die Page-Klasse in router.php hinzu

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.

Fügen Sie die Routes-Klasse in router.php hinzu

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.

Fügen Sie die Router-Klasse in router.php hinzu

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.

Die endgültige Datei router.php sieht folgendermaßen aus.

<?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",
    );
}

Index.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.

Seiten erstellen

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:

Creating a simple page router in PHP Tokigin / Page-Router

Manueller Router aus dem PHP-Router-Repository

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn