2011-12-01 40 views
0

我想以下行爲:CodeIgnitor路由規則幫助需要,CI 2.0版

  1. http://www.mysite.com/應該去:http://mysite.com/welcome

    (DONE通過設置在routes.php文件default_controller)

  2. http://www.mysite.com/controllerName/functionName應該去 controllerName,然後它的功能如果控制器存在。
  3. 如果controllerName不存在,就應該到: specialController和specialFunction與functionaName作爲 參數

如。 http://www.mysite.com/greatProducts應該成爲 http://www.mysite.com/specialController/specialFunction/greatProducts如果greatProducts控制器不存在,(它可以是任何字符串,而不僅僅是greatProduct,情況是相同的,即與該名稱的控制器不存在)

會想最好執行此使用路由規則, 通過編輯庫來改變URI段對我來說似乎不是一個好的選擇。

這個工程:

我試過了,在覈心/ routes.php文件編輯routes.php文件並添加類似

`$segments = array("specialController","specialFunction",$segments[0]); 
     return $segments;` 

如果發現該控制器不存在。

回答

3

試試這個(還未經測試,但應工作):

$route['greatPtroduct/(:any)'] = "specialController/specialFunction/$1"; 

控制器:

class specialController extends CI_Controller { 

    function specialFunction($method) 
    { 
    if(method_exists($this,$method)) 
    { 
     $this->$method; 
    } 
    else 
    { 
     show_404; 
    } 
    } 

UPDATE:

這更棘手。像

$route['(:any)/(:any)'] = "specialController/specialFunction/$1"; 

路由的工作,但它會抓住任何控制器,因此,如果你在你的應用其他的,你需要它們列入白名單,以避免這種被逮住。例如:

$route['contact'] = "contact"; 
$route['about'] = "about"; 
// and so on 
$route['(:any)/(:any)'] = "specialController/specialFunction/$1"; 
+0

嗨,感謝您的幫助。這似乎很接近。但是在這裏控制器'greatProduct',可以是其他任何東西。它可以是任何字符串,例如'anotherProdcut','cheapProduct',並且這個控制器不存在,這就是爲什麼需要路由規則。 – DhruvPathak

+0

@DhruvPathak我更新了我的答案;我現在知道了嗎?否則,你會更清楚你的意圖,因爲我不明白**編輯:**現在明白了,給我一些時間來想想 –

+0

有一個小問題點#3的編輯,有一個look.I也提到了它的工作原理,但是這是基於庫編輯,而不是路由配置。 – DhruvPathak