2015-07-20 35 views
0

我在我的PHP項目路由器類,它的工作原理是這樣的: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'); 

所以當URL SERVER/My/admin叫的的index方法AdminController類被調用。

我的問題:我如何處理查詢字符串?

我想要一張帶有表格的頁面。提交時,表單會發送到SERVER/My/admin/check,即admin文件夾中的check.php頁面。

我定義的路線是這樣

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

但URL沒有找到,當然,因爲查詢字符串attatched的URL。我應該如何處理這個最好的?

回答

1

在檢查$_SERVER['REQUEST_URI']之前,請先刪除第一個?之後的所有內容(如果有的話)。使用該值檢查它是否與$url匹配。事情如此簡單就可以了:

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

需要與查詢參數工作的任何控制器應該能夠從$_GET得到他們,或在最壞的情況$_SERVER['QUERY_STRING']