关于路由设置的问题
本帖最后由 萝卜茄子 于 2015-10-16 12:13 编辑问题叙述: 在控制器welcome下面定义了一个number(),该方法接收一个id作为其参数。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Welcome extends CI_Controller{
public function number($id)
{
echo $id;
}
}
在路由文件中定义了两条规则:
//这是第一条
$route['welcome/(+)']= 'welcome/$1';
//这是第二条
$route['welcome/number/(+)'] = 'welcome/number/$1';
通过测试,第一条是完全正常的。且能做到只匹配数字。
第二条路由规则则无法限定传入的参数是数字,即便是输入的'abc'这样的非数字字符串,该方法也能接收到。
问题是,如何做让其路由匹配且只按照设定的路由规则匹配?
比如第二条只匹配数字。其他的就无法匹配。
现在这么写路由的时候,第二条路由完全失效。
求破!
非常感谢!
——20151016
——萝卜茄子
研究了下:
将第二条路由规则做了如下修改:
$route['welcome/number/(\S+)'] = function($id){
return is_numeric($id) === TRUE ? 'welcome/number/'.$id : show_404();
};
如此的话就可以限制传入的id是数字,且是同这个匿名函数验证后的。
这里也可以对id进行一系列的过滤,然后返回。
一个核心点是要完全匹配到该路由规则才行。所以用了\S来匹配当前id传入的任意字符,然后在该匿名函数中做相应的过滤。、
感谢大家的关注!
——20151016
——萝卜茄子
本帖最后由 ci520 于 2015-10-20 12:42 编辑
学习了 刚刚接触没多长时间,还用不上,相信以后会用到的。感谢分享{:soso_e102:} ci520 发表于 2015-10-20 12:00
学习了 刚刚接触没多长时间,还用不上,相信以后会用到的。感谢分享 ...
感谢亲的关注。
ci天生不支持路由里面写太多东东。或许也还没研究透。
最后思考的结果是,最好在方法中对参数进行一系列的处理是最妥当的。
如果有什么新的进步,我们彼此分享。
——20151020
——萝卜茄子
页:
[1]