【发布时间】:2019-01-08 12:54:26
【问题描述】:
我在使用 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/ 我看到了:索引完成
但是,如果我去: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/ 我看到了:索引完成
但是,如果我去: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/ 我明白了:索引完成!!!
但是,如果我去:http://localhost:8888/test/index.php/track/demo 我明白了:演示完成!!!
这正是我期望看到的!
我该如何解决这个问题?我真的很想找到一种方法来解决这个问题,以便下划线按预期工作,因为我的命名方案主要基于文件名和类名中的下划线。
【问题讨论】:
-
使用
$route['track\(:any)']= 'C_track';创建路由以访问一个控制器内的所有方法以获取更多详细信息show this
标签: php codeigniter routing