如何创建不覆盖其他控制器路由的Codeigniter路由?

时间:2010-03-28 10:47:53

标签: codeigniter routes

我的Codeigniter应用程序中有很多控制器,例如:Signup,Profile,Main等。

现在我想构建“用户”控制器。

我想要的是什么:

  • 如果有人访问网址: example.com/signup ,我希望使用默认路由“注册”控制器
  • 如果有人访问网址: example.com/bobby.ariffin ,我想将其重新路由到“用户”控制器,因为该网址未由任何控制器处理我的应用程序。

我在 config / routes.php 中创建了这个:

$route['(:any)'] = "user";

但它覆盖了我的应用中“用户”控制器的所有路线。

是否有任何简单的Codeigniter路由不会覆盖其他控制器路由?

更新---

我有这个问题的简单正则表达式,来自:Daniel Errante's Blog

$route['^(?!ezstore|ezsell|login).*'] = “home/$0″;

其中ezstore,ezsell和login是您的应用程序中控制器的名称。

2 个答案:

答案 0 :(得分:5)

您也可以使用foreach语句。这样你就可以把你的控制器放在一个很好的清单中。

$controller_list = array('auth','dashboard','login','50_other_controllers');

foreach($controller_list as $controller_name)
{
    $route[$controller_item] = $controller_name;
}

$route['(:any)'] = "user/display/$1";

答案 1 :(得分:3)

您将必须明确定义所有这些路线。否则,您将始终以“user_controller”结束。

$route['signup'] = "signup";
$route['(:any)'] = "user/display/$1";

或类似的东西。它们是按顺序运行的,所以首先定义的是,它将首先发生。因此,如果你抓住(:any),你将把任何东西发送给那个控制器。

另请注意,您可以使用正则表达式,因此如果您知道总会有“。”在那里,你可以测试一下。