简单的PHP路由项目



我需要创建一个简单的路由机制,它接受一个类似:/foo/bar的请求,并将其转换为FooController->barAction();我必须使用单个脚本作为访问点来加载这些控制器类和操作方法。我也不能使用任何外部框架或库来完成这项任务。这需要能够在带有Apache的PHP 5.3服务器上运行。

以下是我已经写的内容,但我很难让它发挥作用:

class Router {
    private static $routes = array();
    private function __construct() {}
    private function __clone() {}
    public static function route($pattern, $callback) {
        $pattern = '/' . str_replace('/', '/', $pattern) . '/';
        self::$routes[$pattern] = $callback;
    }
    public static function execute() {
        $url = $_SERVER['REQUEST_URI'];
        $base = str_replace('\', '/', dirname($_SERVER['SCRIPT_NAME']));
        if (strpos($url, $base) === 0) {
            $url = substr($url, strlen($base));
        }
        foreach (self::$routes as $pattern => $callback) {
            if (preg_match($pattern, $url, $params)) {
                array_shift($params);
                return call_user_func_array($callback, array_values($params));
            }
        }
    }
}

我正在尝试至少执行基于另一个简单路由器的当前脚本,但我实际上无法使用获得输出

Router::route('blog/(w+)/(d+)', function($category, $id){
  print $category . ':' . $id;
});
Router::execute();

而不是试图突破PATH。为什么不使用.htaccess呢。

所以你可以有这样的内部URL:

index.php?module=MODULE&action=INDEX

然后使用.htaccess提供URL中的路径,并相应地对其进行路由。

www.mydomain.com/MODULE/INDEX

这篇文章可以帮助重写在htaccess 中创建pritty url的正则表达式

也许还有一个更好的,只是在谷歌上快速搜索一下。

通过这种方式,您可以访问如下:

$module = $_GET['module'];
$action = $_GET['action];

然后,您可以对路由器中的相应操作进行检查,以检查它是否存在,然后相应地重新路由。

最新更新