对thinkphp3.1路由的扩展(底层代码修改)

浏览:690 发布日期:2013/12/06 分类:技术分享 关键字: URL 路由
最近在一个项目中是用tp的路由,发现在规则路由中只有匹配数字\d和匹配全部的方法,深感不便。文档中说明如下:news/:id\d 规则表示当URL中id参数为数字时才会匹配
而 news/:name 规则定义 则会匹配所有的字符情况,这也是默认的情况,目前规则路由只区分数字和所有字符的情况,如果需要严格的类型约束,请采用正则路由定义规则。
于是修改了一下tp的代码,增加了全字母和全汉字的规则\w 和 \c
修改文件:ThinkPHP/Lib/Behavior/CheckRouteBehavior.class.php
大约在73行处找到>
if('d'==$type && !is_numeric($m1[$key])) {
        $match = false;
        break;
}
在下面添加/*自己加的验证规则,匹配字母*/
                    if('w' == $type && !preg_match('/^[a-zA-Z]+$/', $m1[$key])){
                         $match = false;
                         break;
                    }
                    /*自己加的验证规则,匹配中文( 不包括中文标点)*/
                    if('c' == $type && !preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $m1[$key])){
                        $match = false;
                        break;
                    }
这里就加了两种规则路由,如果更复杂只好自己用正则路由了。。。或者自己加个规则
最佳答案
评论( 相关
后面还有条评论,点击查看>>