![ThinkPHP实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/852/26943852/b_26943852.jpg)
上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。