CodeIgniter - 如何路由具有其他名称的控制器?

Posted

技术标签:

【中文标题】CodeIgniter - 如何路由具有其他名称的控制器?【英文标题】:CodeIgniter - How to route a controller with other name? 【发布时间】:2015-08-01 19:10:11 【问题描述】:

我在我的 codeIgniter 中安装了一个名为 bit_auth 的身份验证模块。 我有一个名为“bit_auth”的模块的控制器,所以在我的控制器上调用函数时,我的 url 将是这样的:

http://(mydomain.com)/bit_auth/
http://(mydomain.com)/bit_auth/edit_user/1
http://(mydomain.com)/bit_auth/activate/7b60a33408a9611d78ade9b3fba6efd4fa9eb0a9

现在我想路由我的bit_auth 控制器以从http://(mydomain.com)/auth/... 调用。 我在“config/routes.php”中定义了这些路线:

$route['auth/(:any)'] = "bit_auth/$1";
$route['auth'] = "bit_auth";

当我使用时它工作正常:http://(mydomain.com)/auth/ 但是在打开以下链接时显示 404 page not found 错误:http://(mydomain.com)/auth/edit_user/1 http://(mydomain.com)/auth/activate/7b60a33408a9611d78ade9b3fba6efd4fa9eb0a9

我做错了什么?

【问题讨论】:

【参考方案1】:

因为您使用的参数比路由中的参数多,所以您必须这样做:

$route['auth/(:any)/(:num)'] = "bit_auth/$1/$2";

希望这会有所帮助!

【讨论】:

感谢您的回复,我尝试了您的代码,它适用于我的问题中的两个地址,但它不适用于任何地方,例如我有另一个这样的链接:http://(mydomain.com )/auth/activate/7b60a33408a9611d78ade9b3fba6efd4fa9eb0a9 再次显示错误 404 页面。 在这种情况下将 :num 更改为 :any 谢谢!它现在工作正常,但其他链接呢?我希望成为包含其余链接的另一种方式,例如可变长度的额外 uri 段。 您必须将 another 行添加到您的 routes.php 例如$route['auth/(:any)/(:any)/(:any)'] = "bit_auth/$1/$2/$3";【参考方案2】:

在谷歌搜索和调查之后,我在某处看到他们在 CodeIgniter 中使用另一种语法进行路由,该语法直接使用 regular expression 而不是使用 codeigniter 描述的模式,如 (:any)(:num) 在它的帮助中。我刚刚在我的config/routes.php 中将 (:any) 替换为 (.+),现在它运行良好。

$route['auth/(.+)'] = "bit_auth/$1";
$route['auth'] = "bit_auth";

因为在 CodeIgniter 中 (:any)(:num) 不包括 / 并且它们是 ([^\/]+)(\d+) 的正则表达式模式的别名,所以如果你想匹配其余的包含任意数量的/ 的链接,您可以使用手动正则表达式模式(.+),其模式中包含/,并将触发所有其余的URL。

【讨论】:

以上是关于CodeIgniter - 如何路由具有其他名称的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter路由:如何在url中显示名称而不是id号

如何在 [codeigniter] 中上传具有随机名称规则的图像

具有两个段的CodeIgniter路由不起作用

使用 codeigniter 将具有相同输入名称的表单输入插入数据库行

如何将图像路径和名称上传到数据库 - Codeigniter

Codeigniter 索引控制器路由问题