ThinkPHP支持URL路由功能,要启用路由功能,须要设置ROUTER_ON 参数为true。开启路由功能后,系统会自动进行路由检测,若是在路由定义里面找到和当前URL匹配的路由名称,就会进行路由解析和重定向。路由功能须要定义路由定义文件,位于项目的配置目录下面,文件名为routes.php,定义格式:php
PHP代码浏览器
Return Array(spa
// 第一种方式 常规路由server
‘RouteName’=>array(‘模块名称’,'操做名称’,'参数定义’,'额外参数’),blog
// 第二种方式 泛路由ci
array(‘路由匹配正则’,'模块名称’,'操做名称’,'参数定义’,'额外参数’),get
),it
)io
系统在执行Dispatch解析的时候,会判断当前URL是否存在定义的路由名称,若是有就会按照定义的路由规则来进行URL解析。例如,咱们启用了路由功能,而且定义了下面的
一个路由规则:
PHP代码
‘blog’=>array(‘Blog’,'index’,'year,month,day’,'userId=1&status=1′)
泛路由支持
新版引入了泛路由支持,提供了对同一个路由名称的多个规则的支持,使得URL的设置更加灵活,例如,咱们对Blog路由名称须要有多个规则的路由:
PHP代码
array(‘/^\/(\d+)(\/p\/\d)?$/’,'Blog’,'read’,'id’),
array(‘/^\/(\d+)\/(\d+)/’,'Blog’,'archive’,'year,month’),
),
第一个路由规则表示解析 Blog/123 这样的URL到Blog模块的read操做
第二个路由规则表示解析 Blog/2007/08 这样的URL到Blog模块的archive操做
泛路由的定义难度就在路由正则的定义上面,其它参数和常规路由的使用一致。
举个简单路由的例子,若是咱们有一个City模块,而咱们但愿可以经过相似下面这样的URL地址来访问具体某个城市的操做:
http://serverName/index.php/City/shanghai/
shanghai这个操做方法是不存在的,咱们给相关的城市操做定义了一个city方法,以下:
PHP代码
Class CityAction extends Action{
public function city(){
// 读取城市名称
$cityName = $_GET['name'];
echo (‘当前城市:’.$cityName);
}
}
接下来咱们来定义路由文件,实现相似于
http://serverName/index.php/City/shanghai/
这样的解析,路由文件名称是
PHP代码
Return array(
‘City’=>array(‘City’,'city’,'name’);
);
这样,URL里面全部的City模块都会被路由到City模块的city操做,然后面的第二个参数会被解析成 $_GET[‘name’]
接下来,咱们就能够在浏览器里面输入
http://serverName/index.php/City/beijing/
http://serverName/index.php/City/shanghai/
http://serverName/index.php/City/shenzhen/
会看到依次输出的结果是:
当前城市:beijing
当前城市:shanghai
当前城市:shenzhen