>백엔드 개발 >PHP 튜토리얼 >PHP로 간단한 페이지 라우터 만들기

PHP로 간단한 페이지 라우터 만들기

DDD
DDD원래의
2024-09-18 20:22:19461검색

파일 생성

먼저 index.php, router.php, .htaccess 파일을 생성합니다.

.htaccess의 index.php로 모든 요청 리디렉션

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

router.php에 대한 직접 액세스 방지

이 코드는 사용자가 router.php에 직접 액세스하기 위한 URL을 입력하는 경우 404 응답을 표시합니다.

<?php
if (basename($_SERVER['PHP_SELF']) == basename(__FILE__)) {
    http_response_code(404);
    die();
}

router.php에 페이지 클래스 추가

class Page
{
  protected static bool $Return_404 = true;
}

404 페이지를 반환하기 위한 정적 부울 변수를 만듭니다. 기본값으로 true로 설정하겠습니다.
이제 404페이지에 대한 기능을 추가하겠습니다.

protected static function Return_404(): void
    {
       (file_exists("./Pages/404.php")) ?  require_once "./Pages/404.php" : http_response_code(404);
    }

여기서는 Pages 폴더 안에 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;
}

이 함수는 요청 URL에 쿼리 문자열이 포함되어 있거나 "/"로 끝나는지 확인하고 이를 제거합니다.
"Strok" 문자열 함수를 사용하여 "?" 앞의 문자열 값을 가져옵니다. 나는 "스트로크"가 이와 같이 사용되도록 의도된 것이 아니라는 것을 알고 있지만 작동하며 불필요하게 복잡한 알고리즘을 수행하지 않아도 됩니다. "rtrim" 문자열 함수를 사용하여 "/"가 문자열의 마지막에 포함된 경우 이를 제거합니다.

router.php에 Routes 클래스 추가

class Routes
{
    public static array $Route = array(
        "" => "Pages/home.php",
        "/about" => "Pages/about.php",
    );
}

여기에서는 라우팅을 저장하기 위한 정적 배열을 만듭니다.
이 배열에는 "요청된 URL" => "파일 위치".
모든 페이지 파일을 Pages 폴더에 넣었습니다. 원하는 곳에 놓을 수 있습니다.

router.php에 라우터 클래스 추가

Router 클래스는 위에서 이미 생성한 Page 클래스에서 확장됩니다.
"" => "Pages/home.php"는 홈 페이지용입니다.

class Router extends Page
{

}

이제 요청한 파일이 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();
    }

이 함수는 요청한 파일이 $Route 배열에 있는지 먼저 확인합니다. 존재하는 경우 정적 부울 $Return_404가 false로 설정되어 404 페이지가 표시되지 않고 페이지 파일을 가져오지 않습니다. 존재하지 않는 경우 404 페이지가 반환됩니다.
파일이 존재하지만 Pages 폴더에 파일이 없으면 함수는 "오류"를 표시합니다. 여기서 echo "Error" 대신 404 페이지를 표시할 수 있습니다.

최종 router.php 파일은 다음과 같습니다.

<?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

index.php에서 Router 클래스의 "Run" 기능을 사용하겠습니다.

<!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>

페이지의 모든 HTML 코드는 'body' 태그에 포함됩니다.

페이지 만들기

마지막으로 Pages 폴더에 home.php, about.php, 404.php를 생성합니다.

home.php

<h1>Home page</h1>

about.php

<h1>about page</h1>

404.php

<h1>404 page</h1>

코드가 "xampp" 또는 "PHP 서버" 확장명으로 작동하는지 확인하세요.

오류가 발생하면 언제든지 알려주세요. XD

다음에서 Github 저장소를 확인할 수도 있습니다.

Creating a simple page router in PHP 토키긴 / 페이지 라우터

php-router 저장소의 수동 라우터

위 내용은 PHP로 간단한 페이지 라우터 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.