2011-12-01 94 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