如何创建不覆盖其他控制器路由的 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 路由?的主要内容,如果未能解决你的问题,请参考以下文章