You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Router如何实现点击按钮/a标签调用views目录下对应页面

PHP Router实现点击跳转加载对应视图页面操作方案
  • 第一步:修改index.php中的a标签跳转路径
    你当前的a标签href属性为空,需要和routes.php中定义的路由规则对应,修改后代码如下:
<div class="menu-item"><a href="/contact">Contact</a></div>
<div class="menu-item"><a href="/message">Send Message</a></div>

如果你的项目部署在域名子目录下(比如http://domain.com/myproject/),则需要将href改为/myproject/contact和/myproject/message。

  • 第二步:补全router.php的路由匹配逻辑
    你当前贴出的route函数只处理了根路径匹配的场景,缺少请求方法判断、非根路径匹配逻辑,补全后的完整代码如下:
function any($route, $path_to_include){ 
    route($route, $path_to_include); 
}
function get($route, $path_to_include){
    if ($_SERVER['REQUEST_METHOD'] === 'GET') {
        route($route, $path_to_include);
    }
}
function post($route, $path_to_include){
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        route($route, $path_to_include);
    }
}
function route($route, $path_to_include){
    $ROOT = $_SERVER['DOCUMENT_ROOT'];
    if($route == "/"){
        include_once("$ROOT/$path_to_include");
        exit();
    }
    $request_url = filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL);
    $request_url = rtrim($request_url, '/');
    $request_url = strtok($request_url, '?');
    $route_parts = explode('/', $route);
    $request_url_parts = explode('/', $request_url);
    array_shift($route_parts);
    array_shift($request_url_parts);
    if( $route_parts[0] == '' && count($request_url_parts) == 0 ){
        include_once("$ROOT/$path_to_include");
        exit();
    }
    // 新增非根路由匹配逻辑
    if (count($route_parts) != count($request_url_parts)){
        return;
    }
    $parameters = [];
    for($i = 0; $i < count($route_parts); $i++){
        $route_part = $route_parts[$i];
        // 支持动态路由参数匹配
        if( preg_match("/^[{].*[}]$/", $route_part) ){
            $parameters[] = $request_url_parts[$i];
        } else if($route_part != $request_url_parts[$i]){
            return;
        }
    }
    include_once("$ROOT/$path_to_include");
    exit();
}
  • 第三步:配置Web服务器URL重写规则
    不配置重写规则的话,直接访问/contact会触发404错误,根据你使用的服务器选择对应配置:
    • Apache服务器:在项目根目录新建.htaccess文件,添加如下规则
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L]
  • Nginx服务器:在站点配置文件中添加如下规则
location / {
    try_files $uri $uri/ /index.php?$query_string;
}
  • 第四步:确认入口文件加载顺序
    在index.php的最顶部优先引入路由相关文件,保证路由逻辑先执行:
<?php
include_once 'router.php';
include_once 'routes.php';
// 下方为原有index.php页面代码
?>

所有配置完成后,点击对应a标签就会自动匹配路由规则,加载views目录下的对应页面文件。

内容的提问来源于stack exchange,提问作者Abraham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:42:03