php技术博客
让天下没有搞不定的bug~

ThinkPHP URL 路由功能详解与实例

本节内容主要介绍 ThinkPHP 路由功能与U方法的使用,分为下面几个部分:

ThinkPHP URL 路由功能详解
ThinkPHP 泛路由使用详解
ThinkPHP 2.1 路由规则对比 2.0 的变更
ThinkPHP U方法:使用U方法自动生成URL超链接
ThinkPHP U方法中使用路由的问题(bug)与解决办法
URL 路由简介
简单的说,URL 路由就是允许你定制你需要的 URL 样子,这样做会美化 URL ,提高用户体验,也有益于搜索引擎的收录。

例子:

原本的 URL 为:http://www.5idev.com/index.php/Products/Show/Category/5/Products_id/123/status/1

经过 URL 路由改写后 URL 可以为:

http://www.5idev.com/index.php/product/5/123

当然,使用 Apache 的 URL Rewrite 规则也能达到 URL 定制的功能,在此就不展开了,请参看 Apache Rewrite 相关的文章。

ThinkPHP URL 路由配置
在 ThinkPHP 中要使用 URL 路由功能,需要做如下配置:

在项目配置文件 config.php 里面开启路由功能(设置为 true):

‘URL_ROUTER_ON’ => true,
在项目配置目录 Conf 下创建路路由定义文件,文件名为 routes.php ,注意使用 UTF-8 编码。

路由规则定义
路由规则定义于 routes.php 文件内,格式为数组格式,具体定义规则又分为常规路由和泛路由,语法如下:

return array(
// 常规路由
‘路由名称’=>array(‘模块名称’, ‘操作名称’, ‘参数定义’, ‘额外参数’),
// 泛路由
‘路由名称@’=>array( array(‘路由匹配正则’, ‘模块名称’, ‘操作名称’, ‘参数定义’, ‘额外参数’), ),
…更多的路由名称定义
)
路由规则参数中,参数定义和额外参数是可选项,可以根据实际情况选择性使用。

如果在配置文件里定义了路由开启功能,系统在执行 Dispatch 解析的时候,会判断当前 URL 是否存在定义的路由名称,如果有就会按照定义的路由规则来进行 URL 解析。

提示

如果您使用的是 ThinkPHP 2.1RC 及更高版本,请同时参阅《ThinkPHP 2.1 版本 URL 路由规则对比 2.0 版本的变更》。

ThinkPHP URL 路由实例
以本文开始的例子为例,看该路由是如何定义的:

return array(
// 常规路由
‘product’=>array(‘Products’, ‘show’, ‘category,product_id’, ‘status=1’),
)
这样当访问 index.php/product/5/123 时,实际访问的是 index.php/Products/show/category/5/product_id/123/status/1。

补充说明
ThinkPHP 2.0 版本不支持路由名称大写,即 product 可以,Product 路由失效。
不要将路由名称配置与模块名称相同。
参数定义的内容应该是动态的参数,URL 地址需要按顺序传入实际的参数值。
额外参数的内容应该是固定的参数值,由 ThinkPHP 在解析路由的时候,自动隐含传入而无需在 URL 中体现出来,且参数格式要普通格式,如:status=1&type=1。
解析到分组
如果启用了项目分组,而需要将路由解析至某个分组模块如 Admin 分组:

‘product’=>array(‘Admin.Products’, ‘show’, ‘category,product_id’, ‘status=1’),
由于默认分组可以省略,因此如果解析至默认分组的话,可以不用加默认分组名称。

URL 兼容模式
如果 URL 使用了兼容模式,则上述 URL 地址应该为:index.php/?r=product&category=5&products_id=123。

以上是 ThinkPHP URL 路由配置说明及常规路由的用法实例,通过 URL 路由可以制造出更加友好和符合 SEO 的 URL ,要了解更加强大的泛路由,参见本节另一部分内容:ThinkPHP 泛路由 。

赞(0)
未经允许不得转载:PHP技术博客 » ThinkPHP URL 路由功能详解与实例