ThinkPHP 2.1 路由
ThinkPHP 2.1 版本(包括 2.1RC 版本)启用了全新的 URL 路由定义规则,与 2.0 本版相比,有两个方面的区别:
- 路由配置方式:支持 routes.php 文件配置与配置文件 Config.php 中使用 URL_ROUTE_RULES 选项进行配置
- 路由配置规则。
另外在 2.1 版本中,还解决了路由名称不能使用大写英文字符的 bug 。
routes.php 文件配置
ThinkPHP 2.1 版本路由规则做了较大改动,原规则:
return array( // 常规路由 '路由名称'=>array('模块名称', '操作名称', '参数定义', '额外参数'), // 泛路由 '路由名称@'=>array( array('路由匹配正则', '模块名称', '操作名称', '参数定义', '额外参数'), ), )
变更为:
return array( // 常规路由 array('路由名称','[分组/]模块/操作名', '路由对应变量','额外参数') // 泛路由 array('正则定义','[分组/]模块/操作名', '路由对应变量','额外参数') )
路由例子
前面2.0版本中 ThinkPHP路由使用 与 ThinkPHP泛路由 两文中的路由例子,对应 2.1 版本中变更如下:
return array( // 常规路由 array('product','Products/show', 'category,product_id', 'status=1') // 解析到分组 array('product2','Admin/Products/show', 'category,product_id', 'status=1') // 泛路由 array('/^product/(\d+)/(\d+)$/is','Products/archive', 'year,month') )
可以看出,定义规则做了一定的变更,其中泛路由中,正则定义匹配从 APP_NAME 后开始而不是像 2.0 版本从路由名后开始匹配,如下红色部分:
http://www.5idev.com/index.php/product/2010/10
另外增加了PHP正则修正符 i(忽略大小写)和 s(将字符串视作一行,换行符作为普通字符匹配),这个是具体情况是否需要,关于正则表达式更多信息参见《PHP 正则表达式》。
Config.php 文件配置
除了可以在 routes.php 文件进行路由配置外,也可以直接在配置文件 Config.php 中使用 URL_ROUTE_RULES 项目进行设置,定义规则一致:
'URL_ROUTE_RULES' => array( array('product','Products/show', 'category,product_id', 'status=1') array('/^product/(\d+)/(\d+)$/is','Products/archive', 'year,month') ),
如果有 routes.php 文件配置,将会优先使用 routes.php 文件配置中的路由定义。
总的来说,ThinkPHP 2.1 版本的路由配置在配置规则上显得更加统一简练,同时也提供了在配置文件 Config.php 中直接配置路由。