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 将具有相同输入名称的表单输入插入数据库行