用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1357|回复: 3
收起左侧

[HELP] 请问怎么关闭CI默认的类名+方法名路由规则

[复制链接]
发表于 2016-12-16 21:01:47 | 显示全部楼层 |阅读模式
本帖最后由 liaow10 于 2016-12-16 21:03 编辑

默认情况下,URL可以通过类名+方法名直接调用,比如我有个类名叫game,他有个方法是get($gid)。需求是:我希望只有GET方法,且满足路由规则/game/123才调用我的这个方法,并将123作为参数传递进去。

然后我在routes.php文件里面写了这样的规则:

$route['game/(:num)']['get'] = 'game/get/$1';

接着在game.php的类game里面写这样的函数

public function get($gid)
{
    echo "heihei";
    echo json_encode($gid);
}

这种方法确实实现了我的需求,符合这个规则的URL可以调用进来。比如:/game/2334

但是!!!不符合这个规则的URL也可以通过CI的默认规则进来:/game/get/hkkk
调进来之后参数$gid='hkkk',而且由于是依靠默认规则进来的,所以不管是get,还是post,put都可以进来。
这种情况除了不符合我的需求之外,个人感觉这样非常不安全,默认方法将一个接口随便暴露出去了,为了这个我得在每个函数里面加入参数验证。

请教各位,这种情况应该怎么解决呢?我在URI路由文档中看到routes不是用来过滤的,那过滤的地方在哪里配置呢?
 楼主| 发表于 2016-12-18 10:54:30 | 显示全部楼层
本帖最后由 liaow10 于 2016-12-19 09:46 编辑

求助!!!
刚刚看到可以使用_remap的方法在类里面定义过滤规则,但是这样的方法比较麻烦,我还是希望能够直接在route里面写路由规则,然后关掉CI默认的那套。
Hex大神呢?
发表于 2016-12-19 10:31:05 | 显示全部楼层
你说的需求 CI 3.X 应该是没有的,这个功能在 CI 4 里是有的。
所以,如果你需要 CI 3.x 有这个功能,就需要自己改改 CI 的源代码。
 楼主| 发表于 2016-12-19 10:41:10 | 显示全部楼层
Hex 发表于 2016-12-19 10:31
你说的需求 CI 3.X 应该是没有的,这个功能在 CI 4 里是有的。
所以,如果你需要 CI 3.x 有这个功能,就需 ...

好的,明白啦!谢谢!

本版积分规则