【问题标题】:Add 404 rule into PHP class router在 PHP 类路由器中添加 404 规则
【发布时间】:2021-02-16 03:50:52
【问题描述】:

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

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

路由器.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');

?>

【问题讨论】:

    标签: php class http-status-code-404 router


    【解决方案1】:

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

    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);
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多