我从头开始创建了一个路由器。这是一个简单的路由器:
class Router {
private static array $routes;
public static function register($route = '/', $filename=''){
self::$routes[$route] = $filename;
}
public static function run(string $URI){
$route = explode('?', $URI)[0];
$play = self::$routes[$route];
if($play){
try{
var_dump($play);
require_once $play;
} catch(Error $e){
echo "<h1>Can't find the file </h1> <p>" . $e -> getMessage() . "</p>";
}
}else{
echo "<h1>Page not found 404</h1>";
}
}
}
主页index.php使用页眉和页脚作为外部文件。在中间,我们可以调用路由器,它就可以工作了。逻辑很清楚:
require_once dirname(__DIR__) . '/config/Router.php';
/**
* Registration of routers =======================+
*/
Router::register('/', './index.php');
Router::register('/associations', dirname(__DIR__) . '/views/associations/index.php');
Router::register('/associations/add', dirname(__DIR__) . '/views/associations/add.php');
Router::register('/partnerships', dirname(__DIR__) . '/views/partnerships/index.php');
Router::register('/test/t', dirname(__DIR__) . '/views/associations/test.php');
/**
* Definitions of variables ======================+
*/
$title = 'List of associations';
$page_title = 'Organize your partnerships in ***';
/**
* Requiring the header for every page ===========+
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . '/views/layouts/header.php';
/**
*
*/
var_dump($_SERVER['REQUEST_URI']);
Router::run($_SERVER['REQUEST_URI']);
/**
* Requiring the header for every page ===========+
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'views/layouts/footer.php';
对于只有一个斜杠的页面,它工作得很好。但是对于 /associations/add 这样的页面,页面可以正确上传,但无法读取 CSS。
注意:我没有使用composer,也没有制作自动加载器!
我尝试更改 CSS 文件的路径,但这会影响其他文件,因为它们都有相同的标头。这不是问题所在。我确信路由是问题所在。但我该如何解决这个问题呢?任何帮助将不胜感激!
你能给出 html 模板的例子吗?
我猜,你使用了相对路径:
<link rel="stylesheet" type="style.css">
当需要使用绝对路径时:
<link rel="stylesheet" type="text/css" href="/style.css">