ThinkPHP实战
上QQ阅读APP看书,第一时间看更新

4.6 URL生成

ThinkPHP一个强大之处在于可以根据不同的URL模式来生成不同的URL地址,为此ThinkPHP提供了“U”函数,该函数确保了项目在移植过程中不受运行环境的影响。

U方法定义如下:

   U(地址表达式,参数,是否显示伪静态后缀,是否显示域名)

4.6.1 地址表达式

地址表达式格式如下:

   [模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...

如果没有指定模块名,则ThinkPHP使用当前模块名,来看以下例子:

      U('User/add')//生成User控制器的add操作的URL
      U('Blog/read? id=1')//生成Blog控制器的read操作且id为1的URL
      U('Home/Index/index')//生成Home模块下Index控制器的index操作的URL

4.6.2 参数

参数支持数组和查询字符串形式,所以以下方式是等效的:

● U(‘User/view', array(‘id'=>1, ‘role'=>‘admin'))

● U(‘User/view', ‘id=1&role=admin')

4.6.3 伪静态后缀

该参数为true时,系统读取URL_HTML_SUFFIX配置来生成URL,如果需要临时使用新规则,可以直接加参数后缀名,例如:

   U('Blog/view', array('id'=>1), 'shtml')

4.6.4 URL模式处理

不同的URL_MODEL会导致生成不同的URL地址,以U(‘Blog/view', array(‘id'=>1), ‘shtml')为例。

普通模式:

   /index.php? m=Home&c=Blog&a=view&id=1

pathinfo模式:

   /index.php/Home/Blog/view/id/1.shtml

rewrite模式:

   /Home/Blog/view/id/1.shtml

兼容模式:

   /index.php? s=/Home/Blog/view/id/1.shtml

如果“URL_CASE_INSENSITIVE”为“true”, ThinkPHP会将生成结果统一转换为小写。

4.6.5 生成路由地址

假设定义了以下路由规则:

   'blog/:id\d'=>'Blog/read'

那么可以使用U(‘/blog/1')来生成/index.php/Home/blog/1.shtml。