"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP로 간단한 페이지 라우터 만들기

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

2024-11-07에 게시됨
검색:545

파일 생성

먼저 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 응답을 표시합니다.

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에 라우터 클래스 추가

라우터 클래스는 위에서 이미 만든 페이지 클래스에서 확장됩니다.
"" => "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 파일은 다음과 같습니다.

 $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" 기능을 사용합니다.


Router

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

페이지 만들기

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

home.php

Home page

about.php

about page

404.php

404 page

코드가 "xampp" 또는 "PHP 서버" 확장 프로그램에서 작동하는지 확인하세요.

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

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

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

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

릴리스 선언문 이 글은 https://dev.to/kohtet_gintoki/creating-a-simple-page-router-in-php-2hpf?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3