"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Criando um roteador de página simples em PHP

Criando um roteador de página simples em PHP

Publicado em 2024-11-07
Navegar:353

Criar arquivos

Primeiro, criaremos os arquivos index.php, router.php e .htaccess.

Redirecione todas as solicitações para index.php em .htaccess

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

Impedir o acesso direto ao router.php

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:

Creating a simple page router in PHP Tokigin / roteador de página

Roteador manual do repositório php-router

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/kohtet_gintoki/creating-a-simple-page-router-in-php-2hpf?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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