我正在try 用PHP创建简单的路由,但我不明白为什么它不能正确地重定向.
所以我的设置的工作方式是我有3条路由
- 回家路由"/"
- 用户路径"/USER"
- ID为"/USER?ID={[0-9]}"的用户
当我重定向到"/"ROUTE时,这是打印的内容.
/ Path / traversed
不过,我想把这个打印出来.
/ Succesfuly navigated to / Path / traversed
然而,所有这些都不适用于任何其他路径. 这是我重定向到"/USER"时得到的结果
/user Not Found
这就是我想要呈现的东西.
/user Succesfuly navigated to /user Path /user traversed
这是我为Router.php编写的脚本
<?php
class Router{
public function get($route, $callback){
$path = $this->getPath(); //GET PATH for ex. /users/user
$query = $this->getQuery(); //GET QUERY for ex. ?id=15
print($_SERVER['REQUEST_URI']);
echo " ";
//IF USER IS NAVIGATING TO ROUTE THAT DOESN'T EXIST PRINT "NOT FOUND"
if($path != $route){
$this->notFound();
}
if($path == $route){
//IF CALLBACK IS A STRING DO SOMETHING WITH IT
if(is_string($callback)){
echo "Succesfuly navigated to {$route}";
exit();
}
//EXECUTE CALLBACK FUNCTION
echo call_user_func($callback);
exit();
}
}
//GET PATH FROM URI
private function getPath(){
$path = $_SERVER['REQUEST_URI'] ?? '/';
$paramPosition = strpos($path, "?");
if($paramPosition === false){
return $path;
}
$path = substr($path, 0, $paramPosition);
return $path;
}
//GET QUERY STRING ?id=15
private function getQuery(){
$path = $_GET;
if(count($path) == 1){
return $path;
}
return $path;
}
//404 TEXT
private function notFound(){
http_response_code(404);
echo "Not Found";
exit();
}
}
?>
这是我的index.php
<?php
include_once './core/Router.php';
$router = new Router();
$router->get("/", function() {
echo "Path / traversed";
});
$router->get("/user", function() {
echo "Path /user traversed";
});
$router->get("/user?id={[0-9]}", function(){
echo "Path /user?id={[0-9]} traversed";
});
?>