Primeiro, criaremos os arquivos index.php, router.php e .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,QSA]
Este código mostrará uma resposta 404 se o usuário inserir a URL para acessar router.php diretamente.
Adicionar classe Page em router.php
class Page { protected static bool $Return_404 = true; }Crie uma variável booleana estática para retornar a página 404. Iremos defini-lo como verdadeiro como padrão.
Agora adicionamos uma função para a página 404.
protected static function Return_404(): void { (file_exists("./Pages/404.php")) ? require_once "./Pages/404.php" : http_response_code(404); }Aqui, coloquei uma página 404 dentro da pasta Pages. Você pode colocá-lo em qualquer pasta que desejar.
Também adicionaremos a função "Arquivo".
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 função irá verificar se o URL da solicitação contém uma string de consulta ou terminar com "/" e removê-la.
Eu uso a função string "strok" para obter os valores da string antes de "?". Eu sei que "strok" não deve ser usado assim, mas funciona e me evita de fazer algoritmos complexos desnecessariamente. Eu uso a função de string "rtrim" para remover o "/" se ele estiver contido no final da string.Adicionar classe Routes em router.php
class Routes { public static array $Route = array( "" => "Pages/home.php", "/about" => "Pages/about.php", ); }Aqui, eu crio um array estático para armazenar roteamentos.
Esta matriz contém "URL solicitado" => "Localização do arquivo".
Coloquei todos os arquivos da página na pasta Pages. Você pode colocá-los onde quiser.Adicionar classe Router em router.php
A classe Router será uma extensão da classe Page que já criamos acima.
Observe que "" => "Pages/home.php", é para a página inicial.
class Router extends Page { }Agora, escreveremos a função que verifica se o arquivo solicitado existe na classe 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 função verifica primeiro se o arquivo solicitado está no array $Route. Se existir, o booleano estático $Return_404 é definido como false para que a página 404 não seja exibida e obtenha o arquivo da página. Se não existir, retornará a página 404.
Se existir, mas não houver nenhum arquivo na pasta Pages, a função irá ecoar “Erro”. Você pode mostrar a página 404 em vez de echo "Error" aqui.O arquivo router.php final ficará assim.
$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
No index.php, usaremos a função "Run" da classe Router.
Router Todo o código HTML das páginas estará na tag "body".
Criar páginas
Finalmente, crie home.php, about.php e 404.php na pasta Pages.
home.php
Home page
sobre.php
about page
404.php
404 page
Verifique se o código está funcionando ou não com a extensão "xampp" ou "servidor PHP".
Se você encontrar um erro, sinta-se à vontade para me avisar. XD
Você também pode verificar o repositório do github em:
Tokigin / roteador de página
Roteador manual do repositório php-router
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3