2011-01-11 45 views
2

我正在運行我自己的非常輕的MVC框架(沒有Router類)。 要知道什麼控制器和動作來運行我正在使用庫或正則表達式應用於REQUEST_URI。喜歡的東西...在php應用程序中構建頁面url

$regexps = array(
    '/admin/categories/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'index' 
    ), 
    '/admin/categories/add/' => array(
     'controller' => 'AdminCategories', 
     'action'  => 'add' 
    ), 
); 

一切工作正常,但...

什麼是建立網址的最佳實踐?

BuildUrl('Controller', 'action', array('var1' => 'val1', 'var2' => 'val2')); 

什麼是修改當前的URL(,例如我有10個不同的過濾選項表)的最佳實踐?

ModCurrentUrl(array(...)); 

如何解決您的應用程序中的這個問題?

PS:我沒有使用控制器的動作參數,所有參數都從$ _GET中獲取。

謝謝你,對不起我的英文。

+0

只解決了您的部分問題,並且忙於寫點東西,所以它只是一個評論:http://us2.php.net/manual/en/function.http-build-query.php – Gordon 2011-01-11 13:20:35

回答

0

最佳實踐(正如我所看到的)將有一個名爲Routing(基本上是一個類)的靜態方法庫。然後,您可以使用Routing::buildUrl(...),並與所有的URI填充相關的方法,你會使用(如modCurrentUrl ...)

+0

謝謝爲了您的評論!創建靜態方法對我來說很清楚,但是我在另一個方面看到了問題......例如,您有url`/ admin/categories/view/{{id}} /?filter1 = a&filter2 = b`;這個URL通過`view`動作路由到`AdminCategories`控制器。現在我想用`Routing :: buildUrl(...)`創建這樣的URL。我將`array('id'=> 123,'filter1'=> a,'filter2'=> b)`傳遞給`buildUrl`,並且由於它在路徑中而面臨着id參數的問題,但不在QUERY_STRING中。我們可以有很多這樣的URL,所以我應該爲每個創建分離的方法? – Kirzilla 2011-01-11 11:14:46

+0

這是一個設計問題,您需要重新考慮buildUrl()方法,接受`controller,action,pathArray,queryArray`參數,您是否看到我在哪裏使用pathArray和queryArray參數?請給我, – 2011-01-11 11:20:36

0

這裏是你對很好的鏈接: http://robap.github.com/php-router/ http://code.google.com/ p/routemap/ 我的例子中沒有看到子目錄的任何跡象。在大項目中,它可以很好。 首先請求到路由器類的方法,從那裏你可以得到一些關於路由的實際數據。其次,您將這些數據發送給啓動應用程序的調度程序。