ThinkPHP 2.1 版本 URL 路由规则对比 2.0 版本的变更



ThinkPHP 2.1 路由

ThinkPHP 2.1 版本(包括 2.1RC 版本)启用了全新的 URL 路由定义规则,与 2.0 本版相比,有两个方面的区别:

  1. 路由配置方式:支持 routes.php 文件配置与配置文件 Config.php 中使用 URL_ROUTE_RULES 选项进行配置
  2. 路由配置规则。

另外在 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.zgguan.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 中直接配置路由

    ThinkPHP URL 路由功能详解与实例
    ThinkPHP URL 正则路由与实例
    ThinkPHP 使用U方法自动生成URL超链接
    ThinkPHP 2.0 URL 路由(2.0版本适用)
    ThinkPHP 2.0 泛路由使用详解(2.0 版本适用)
    ThinkPHP 2.1 版本 URL 路由规则对比 2.0 版本的变更
    ThinkPHP U方法中使用路由的问题与解决办法

zgguan.com(it学习网) — 提供最好的 XHTML教程DIV+CSS教程JavaScript教程PHP教程ThinkPHP教程