我在使用 Codeigniter 路由时遇到问题,其中涉及控制器类名称中的下划线。这是我的问题以及如何复制它。
1) 克隆或下载 Codeigniter 并保存在 htdocs 中名为“test”的文件夹中
git clone https://github.com/bcit-ci/CodeIgniter.git
2)创建以下控制器并保存为C_track.php:
class C_track extends CI_Controller {
public function index(){ echo "index done"; }
public function demo(){ echo "demo done"; }
}
3)添加如下路由:
$route['track']= 'C_track';
4)在config.php中正确设置'base_url'(对于我的设置,它是......):
$config['base_url'] = 'http://localhost:8888/test/';
此时,如果我去:http://localhost:8888/test/index.php/track/我看到: index done
但是,如果我访问:http://localhost:8888/test/index.php/track/demo,我会收到 404 错误。
我期待看到:演示完成
好的,现在事情变得奇怪了
5)创建以下控制器并保存为Track.php:
class Track extends CI_Controller {
public function index(){ echo "index DONE!!!"; }
public function demo(){ echo "demo DONE!!!"; }
}
6)不要添加新的路由!
此时,如果我去:http://localhost:8888/test/index.php/track/我看到: index done
但是,如果我去:http://localhost:8888/test/index.php/track/demo我看到:演示完成!!!
这不是我所期望的。出于某种原因,Codeigniter 正在 Track.php 中运行演示功能,即使该文件甚至没有在 routes.php 中列出。我猜下划线是问题所在。因为:
7)更改routes.php:
$route['track']= 'Track';
现在,如果我去:http://localhost:8888/test/index.php/track/我看到:index DONE!!!
但是,如果我去:http://localhost:8888/test/index.php/track/demo我看到:演示完成!!!
这正是我希望看到的!!
我怎样才能解决这个问题?我真的很想找到一种方法来解决这个问题,以便下划线按预期工作,因为我的命名方案很大程度上基于文件名和类名中的下划线。
$route['track']= 'C_track';
在路由中,数组键包含要匹配的 URI,而数组值包含它应该重新路由到的目的地。在上面的代码中,track在 URI 中匹配为最后一个段,即 URI 用/分隔并分解成段。
用于处理http://localhost:8888/test/index.php/track/demo使用
$route['track/(:any)']= 'C_track';
以上将在track后匹配 1 个具有任何类型值的段,并将其重定向到控制器“C_track”。此外,如果您将控制器更改为Track.php ,则/track/demo背后的原因是因为当您将控制器重命名为Track.php 时,URI 默认与该控制器匹配,而无需在Routes中添加自定义路由。 php .
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句