Primero, crearemos archivos index.php, router.php y .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
Este código mostrará una respuesta 404 si el usuario ingresa la URL para acceder directamente a router.php.
Agregar clase de página en router.php
class Page { protected static bool $Return_404 = true; }Cree una variable booleana estática para devolver la página 404. Lo estableceremos en verdadero por defecto.
Ahora agregamos una función para la página 404.protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }Aquí, puse una página 404 dentro de la carpeta Páginas. Puedes ponerlo en cualquier carpeta que quieras.
También agregaremos la función "Archivo".
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; }Esta función comprobará si la URL de solicitud contiene una cadena de consulta o termina en "/" y la eliminará.
Utilizo la función de cadena "trazo" para obtener los valores de cadena antes de "?". Sé que "strok" no debe usarse de esta manera, pero funciona y me evita realizar algoritmos complejos innecesariamente. Utilizo la función de cadena "rtrim" para eliminar "/" si está contenida al final de la cadena.Agregar clase Rutas en router.php
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }Aquí, creo una matriz estática para almacenar rutas.
Esta matriz contiene "URL solicitada" => "Ubicación del archivo".
Puse todos los archivos de la página en la carpeta Páginas. Puedes ponerlos donde quieras.Agregar clase de enrutador en router.php
La clase Enrutador se extenderá desde la clase Página que ya creamos anteriormente.
Tenga en cuenta que "" => "Pages/home.php", es para la página de inicio.class Router extends Page { }Ahora, escribiremos la función que verifica si el archivo solicitado existe en la clase Router.
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(); }Esta función verifica primero que el archivo solicitado esté en la matriz $Route. Si existe, el valor booleano estático $Return_404 se establece en falso para que la página 404 no se muestre ni obtenga el archivo de la página. Si no existe, devolverá la página 404.
Si existe pero no hay ningún archivo en la carpeta Páginas, la función responderá "Error". Puedes mostrar la página 404 en lugar de hacer eco del "Error" aquí.El archivo router.php final se verá así.
$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", ); }índice.php
En index.php, usaremos la función "Ejecutar" de la clase Router.
Router Todo el código HTML de las páginas estará en la etiqueta "body".
Crear paginas
Finalmente, crea home.php, about.php y 404.php en la carpeta Páginas.
inicio.php
Home page
acerca de.php
about page
404.php
404 page
Compruebe si el código funciona o no con la extensión "xampp" o "servidor PHP".
Si encuentras un error, no dudes en comunicármelo. XDD
También puedes consultar el repositorio de github en:
Tokigin / enrutador de paginación
Enrutador manual desde el repositorio de php-router
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3