CodeIgniter路由规则需要帮助,CI版本2.0

时间:2011-12-01 11:13:58

标签: php codeigniter

我想要以下行为:

  1. http://www.example.com/应该转到:http://example.com/welcome

    (DONE BY在routes.php中设置default_controller)

  2. http://www.example.com/controllerName/functionName应该去 controllerName,然后它的功能如果控制器存在。
  3. 如果controllerName不存在,则应该转到: 带有functionaName的specialController和specialFunction 参数
  4. 例如。 http://www.example.com/greatProducts应该成为  http://www.example.com/specialController/specialFunction/greatProducts如果greatProducts控制器不存在,(它可以是任何字符串,而不仅仅是greatProduct,情况相同,即具有该名称的控制器不存在)

    希望最好使用路由规则来实现这一点, 通过编辑库来更改URI段对我来说似乎不是一个好选择。

    这项工作:

    我通过编辑core / Routes.php中的Routes.php并添加类似

    的内容来尝试
    `$segments = array("specialController","specialFunction",$segments[0]);
            return $segments;`
    

    如果发现控制器不存在。

1 个答案:

答案 0 :(得分: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;
     }
  }

<强>更新

这更棘手。像

这样的路线
$route['(:any)/(:any)'] = "specialController/specialFunction/$1";

可以工作,但它会捕获任何控制器,所以如果你的应用程序中有其他控制器,你需要将它们列入白名单以避免受到这种情况的影响。例如:

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