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.phplo.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 中直接配置路由。