添加 404 规则到 PHP class 路由器

Add 404 rule into PHP class router

我有一个简单的 PHP 路由器,但如果 de 文件不存在,我错过了一条规则。 我认为我必须声明所有文件以检查文件是否存在?

但这引发了另一个问题,如何检查端点是否为空或不存在,如果为空,还显示 404 文件。下面是我目前所拥有的代码。

Router.php

<?php
class Router{

    private $request;
    
    public function __construct($request){
    
        $this->request = $request;
        
    }
    
    public function get($route, $file){
    
        $uri = trim( $this->request, "/");
        
        $uri = explode("/", $uri);
    
        if($uri[0] == trim($route, "/")){
        
            array_shift($uri);
            $args = $uri;
        
            require $file . '.php';
            
        }
    }
}
?>

index.php

<?php
include 'Router.php';

$request = $_SERVER['REQUEST_URI'];
$router = new Router($request);

$router->get('/', 'app/home');
$router->get('post', 'app/post');

?>

这对于一个 Whosebug 问题来说有点宽泛,但我认为你需要做的是让你的路由器注册所有可能的路由,并且只在最后尝试 运行 它们:

class Router {
    private $routes = [];

    public function get($route, $file) {
        if (file_exists($file . '.php')) {
            $this->routes[$route] = $file;
        }
    }

    public function run($request) {
        $uri = trim( $request, "/");
        
        $uri = explode("/", $uri);
        if (!empty($uri[0]) && !empty($this->routes[$uri[0]])) {
            $args = $uri;
            require $this->routes[$uri[0]] . '.php';
            return;
        }
        require '404.php';
    }
}

请注意,在 get() 中,仅当给定文件存在时才定义路由。

然后在声明路由时:

<?php
include 'Router.php';

$request = $_SERVER['REQUEST_URI'];
$router = new Router($request);

$router->get('/', 'app/home');
$router->get('post', 'app/post');

$router->run($request);