添加 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);
我有一个简单的 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);