php路由如何处理查询参数?

时间:2015-07-20 17:42:55

标签: php url-routing

我的php项目中有一个路由器类,其工作方式如下:

public function dispatch(){
     foreach ($this->routes as $url => $action) {

        if( $url == $_SERVER['REQUEST_URI'] ){

            if(is_callable($action)) return $action();

            $actionArr = explode('#', $action);
            $controller = 'My\\system\\controllers\\'.$actionArr[0];
            $method = $actionArr[1];

            return (new $controller)->$method();
        }
    }
}

我定义了这样的路线:

My\system\classes\Registry::get("Router")->add('/My/admin/','AdminController#index');

因此,当调用网址SERVER/My/admin时,会调用index类的AdminController方法。

我的问题:如何处理查询字符串?

我想要一个带有表单的页面。提交后,表单会发送到SERVER/My/admin/check,即发送到check.php文件夹中的admin页面。

我定义了这样的路线

My\system\classes\Registry::get("Router")->add('/My/admin/check','AdminController#check');

但是找不到URL,当然,因为查询字符串被附加到URL。我该如何处理这个问题?

1 个答案:

答案 0 :(得分:1)

在检查$_SERVER['REQUEST_URI']之前,请删除第一个?之后的所有内容(如果有)。使用该值检查它是否与$url匹配。像这样简单的东西可以解决问题:

$request = $_SERVER['REQUEST_URI'];
if( ($pos = strpos($request, '?')) !== false) $request = substr($request, 0, $pos);

任何需要使用查询参数的控制器都应该能够从$_GET或最差$_SERVER['QUERY_STRING']获取它们。