2011-08-15 32 views
1

我需要一種方法來快速路由URL的一個類 - >方法()調用使用配置語法不編程每個案例。快速路由一個url到一個函數調用來匹配api規則

我有一個web工具,它需要一個url並使用它來確定url引用的對象的類,使用的是什麼類的方法以及該方法的參數。我使用.htaccess將所有請求傳遞給index.php,因此我讀取$ _SERVER ['PATH_INFO']的路徑,並從那裏過濾並分解以獲取單個組件。

因此www.example.com/user/view/12345將創建一個用戶控制器並調用顯示用戶配置文件的視圖函數。實際上,這將做到以下幾點:

$url = explode("/",trim($_SERVER['PATH_INFO'],"/"); 
$class = $url[0] . "_Controller"; 
$page = new $class; 
echo call_user_func_array(array($page, $url[1]), $url); 

現在,這當然是一個過於簡單化,也有很多其他運動部件的這裏沒有顯示,__autoload(),頁面模板系統,等等,但你這個想法。網址是domain_name/class/function/[arg1]/[arg2]/[arg3]/...並且代碼可以快速確定呈現頁面所需的內容。

不幸的是,該網站需要匹配政策規定的api規則。根據該政策的網址應爲:

DOMAIN_NAME /班/ ENTITYID/function_alias/[ARG1]/[ARG2]/[參數3]/...對於工具的效果特定實體

DOMAIN_NAME /班/ function_alias/[ARG1]/[ARG2]/[參數3]/...對於不依賴於一個單獨的實體

工具,我已經解決了這一點,但它是凌亂。除了在$ url [0]中爲類中的函數調用$ url [0]中的函數並將其餘的參數傳遞給它外,我從$ url [0]中確定對象類,實例化它,然後將url傳遞給對象路線($ url)方法。從那裏我有一個混亂的開關和if語句組合,將url轉換爲適當的類方法。

我需要的是某種配置文件或路由表,我可以定義URL的外觀。我知道有CMS做這種事情。

"user/$1"   => user/view/$1 
"user/add"   => user/add 
"user/$1/edit"  => user/edit/$1 
"user/$1/key/$2" => user/edit_key/$1/$2 

我需要的是一個語法和算法,將迅速確定一個URL的實際目標的類和方法是什麼,實例化,並通過它的必然URL值。

+0

是'entityid' _always_是一個整數嗎? – Shad

回答

1

有可能存在路由類,將讀取某種配置文件,但我不容易找到任何。

這裏有幾個例子,不過,還是讓人在純PHP創建相對優雅的解決方案:
PHP Application URL Routing
http://blog.sosedoff.com/2009/07/04/simpe-php-url-routing-controller/

執行以下任一滿足您的需求?

當然,你也可以純粹用apache重寫來完成這些重定向。

+0

非常好,對我所做的事情有點複雜,但肯定讓我朝着正確的方向前進。 –

相關問題