所谓路由功能,就是利用TP内部的处理机制,将例如index.php/aaa的形式用index.php/bbb来表示。看起来在浏览器里面是在访问index.php/bbb,其实执行的是index.php/aaa的操作~~一定程度上可以起到迷惑的作用,保证了TP的安全(所谓和TP对于URL表示有关)
要使用路由功能,需要以下两步
- 在配置文件_config.php中设定”ROUTER_ON”为true
- 在config目录下创建_routes.php这个文件
其中_routes.php文件就为路由文件,在这个文件中进行设定
该文件有两种写法,一种是return array{}这种格式,另外一种是定义$_routes为array。两种方法都可以,但是个人偏爱于第一种,看起来比较舒服(其实差不多)
路由有分为常规路由和泛路由两种。常规路由,就为一对一的进行路由转义。比如
return array(
‘test’=>array(’Article’,'add’,’sid,time’参数,’mid=36′额外参数));
则此时所有指向URL/test/sid/time的操作,最终都指向为URL/Article/add/sid/time操作并且还隐含传入了mid=36这个额外的参数~
泛路由实在常规路由基础上的加入了正则表达式的匹配
return array(
‘test@’=>array(
array(‘/^\/(\d+)(\/p\/\d)?$/’,’Blog’,'article’,'id’),
array(’/^\/(\d+)\/(\d+)/’,'Blog’,'archive’,'month/day’))
)
上面一个就是一个泛路由。表示将URL/test111的路径解析到URL/Blog/article/id/111,将URL/test/12/13的路径解析到URL/Blog/archive/month/12/day/13这个路径上面
其实泛路由最终还是回到了正则表达式的写法上面去了。一定程度上和Apache的rewrite比较类似。所不同的是这个过程是由PHP来解析而不是Apache来解析。
个人认为如果有有条件,还是使用Apache的rewrite功能,实在不行,比如虚拟主机限制等条件,才考虑使用框架的路由解析功能~
还没有任何评论。