路由功能

一、路由定义

在使用路由功能之前,我们需要启用路由。启用路由前提是你的 URL 支持 PATHINFO
模式或者兼容模式,而 ThinkPHP 默认的就是 PATHINF 模式。只要配置如下启用:

在 WeiBo/Common/Conf/config.php 中启用路由功能:

1 'URL_ROUTER_ON'=>true,

配置路由规则

1 'URL_ROUTE_RULES'=> array(
2      //每条键值对,对应一个路由规则
3 ),

这里注意: 'URL_ROUTE_RULES' 中的  ROUTE 后面没有r,而 'URL_ROUTER_ON'=>true, 中的 ROUTER 有r。

 

PS:由于 ThinkPHP3.2 或以上版本针对模块设置的,所以模块名本身(比如 Home 和
Admin)是无法路由的。当然这点也无需路由,因为可以通过设置默认模块进行去除。

1 //设置模块以及默认模块
2 'MODULE_ALLOW_LIST' => array('Home','Admin'),
3 'DEFAULT_MODULE' => 'Home', // 默认模块,可以省去模块名输入

原来需要在地址栏输入 http://localhost/demo39/Home/User/index.html ,现在就可以省去 Home 了。

 

路由规则定义的格式为:'路由表达式'=>'路由地址和参数',路由表达式包括规则路
由和正则路由两种。
规则表达式例如: blog/:id 
正则表达式例如: /^blog\/(\d+)$/ 

 

二、规则路由

      配置路由规则:

 1、静态地址路由

1 'URL_ROUTE_RULES' => array(
2       'u'=>'User/index',
3     ),

这里只要输入: http://localhost/demo39/u 
对应的原URL: http://localhost/demo39/User/index 

 

2、静态地址和动态地址结合路由

1 'URL_ROUTE_RULES' => array(
2        'u/:id'=>'user/index',
3   ),

这里只要输入: http://localhost/demo39/u/5 
对应的原URL: http://localhost/demo39/User/index/id/5 
这里的5其实就是传递的id值,通过 $_GET['id'] 获取,用系统来获取则是 {$Think.get.id} 。

 

3、静态地址和动态地址结合路由

1 'URL_ROUTE_RULES' => array(
2        'u/:type/:attr/:list'=>'User/index',
3   ),

这里只要输入: http://localhost/demo39/u/5/6/7 
对应的原URL: http://localhost/demo39/User/index/type/5/attr/6/list/7 
这里的567分别对应了动态type、attr、list

 

4、全动态地址

1 'URL_ROUTE_RULES' => array(
2        ':u/:id'=>'User/index',
3   ),

这里只要输入: http://localhost/demo39/u/5 
对应的原URL: http://localhost/demo39/User/index/id/5 
这里的u和5都是可以随便输入的

 

5、数字约束

1 'URL_ROUTE_RULES' => array(
2       'u/:id\d'=>'User/index',
3   ),

给id后面加上一个正则的\d表示只能传递数字

 

6、支持函数

1 'URL_ROUTE_RULES' => array(
2     'u/:id\d|md5'=>'User/index',
3   ),

给id进行md5加密

 

7、可选传参

1 'URL_ROUTE_RULES' => array(
2     'u/[:id\d]'=>'User/index',
3   ),

这样的话,参数处在可选状态

 

8、$表示后面不允许再有东西

1 'URL_ROUTE_RULES' => array(
2     'u/:id$'=>'User/index',
3   ),

 

三、正则路由

正则路由也就是采用正则表达式定义路由的一种方式,很多复杂的路由设置无法通过规则路由设置,则可以使用正则路由。

1、正则路由

1 'URL_ROUTE_RULES' => array(
2     '/^u\/(\d{2})$/'=>'User/index?id=:1',
3   ),

后面用普通的 URL 模式对应规则,不能使用'User/index/id/:1',
这里的:1 表示对应第一个正则圆括号。

 

2、正则路由也支持函数

1 'URL_ROUTE_RULES' => array(
2    '/^u\/(\d{2})$/'=>'User/index?id=:1|md5',
3   ),

 

四、静态路由

静态路由其实就是规则路由的简化版(又称 URL 映射),它就是撇除了动态路由的功能。

配置静态路由

1 'URL_MAP_RULES'=> array(
2         'u/i'=>'User/index',
3 ),

PS:由于性能问题,ThinkPHP 把 MAP 替换为 ROUTER,专门处理静态路由。

 

五、闭包支持

有时,我们并非需要执行控制器的操作方法。可以用闭包定义一些特殊的需求的路由。

配置闭包定义,不执行控制器方法

1、规则路由

1 'URL_ROUTE_RULES' => array(
2    'u/:id'=>function($id) {
3         echo "id:".$id;
4     },
5   ),

2、正则路由

1 'URL_ROUTE_RULES' => array(
2    '/^u\/(\d{2})$/'=>n function ($id) {
3      echo 'id:'.$id;
4           },
5   ),

 

posted @ 2015-05-18 19:20  todaytoday  阅读(415)  评论(0编辑  收藏  举报