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

Posted

技术标签:

【中文标题】如何创建不覆盖其他控制器路由的 Codeigniter 路由?【英文标题】:how to create Codeigniter route that doesn't override the other controller routes? 【发布时间】:2011-02-01 17:17:22 【问题描述】:

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

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

我想要什么:

如果人们访问 url:example.com/signup,我想使用默认路由到“Signup”控制器 如果人们访问 url:example.com/bobby.ariffin,我想将其重新路由到“User”控制器,因为该 url 没有被任何控制器处理我的应用。

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

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

但它覆盖了我的应用程序中到“User”控制器的所有路由。

Codeigniter 有没有不覆盖其他控制器路由的简单路由?

更新---

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

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

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

【问题讨论】:

【参考方案1】:

您也可以为此使用 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";

【讨论】:

【参考方案2】:

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

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

或类似的东西。它们按顺序运行,因此首先定义的将首先发生。因此,如果您捕获 (:any),您将向该控制器发送 ANYTHING。

还请记住,您可以使用正则表达式,所以如果您知道总会有一个 '.'在那里,你可以测试一下。

【讨论】:

“你将不得不明确定义所有这些路线” 哎哟!真的很严格。是的,我想我应该这样做。感谢分享...

以上是关于如何创建不覆盖其他控制器路由的 Codeigniter 路由?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4 - 如何覆盖包中定义的路由?

如何laravel视图里访问其他控制器的路由

MVC:Home-Controller 中的动态路由,不影响其他控制器

Symfony 树枝控制器路由

创建路由时如何指定应该使用哪些控制器?

使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯