U函数的作用是根据当前的URL设置生成对应的URL地址,使用U函数可以确保项目在移植过程中不受环境的影响。
U方法的定义规则如下(方括号内参数根据实际应用决定):
U('地址表达式',['参数'],['伪静态后缀'],['显示域名'])
其中地址表达式的格式定义如下:
[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...
模块/控制器如果与当前模块、控制器相同的话可以省略。
参数值既可以通过'地址表达式'传递也可以通过'参数'传递,而通过'参数'传递时既可以是字符串也可以是数组,所以下面三个URL地址是等效的:
U('blog/read?id=5&stu=0') U('blog/read','id=5&stu=0') U('blog/read',array('id=>5','stu=>0'))
但下面的表达式是错误的:
U('blog/read/id/5/stu/0')
另外,U函数会自动识别当前URL模式,并按当前URL模式生成URL地址。
实例与说明
假设当前URL地址是 http://www.bnzoo.com/Home/Index/index,现在要访问 http://www.bnzoo.com/Home/Index/text/id/25/ty/1,U函数表达如下:
//下面三个表达是等效的 U('text?id=25&ty=1') U('text','id=25&ty=1') U('text',array('id=>25','ty=>1'))
访问 http://www.bnzoo.com/Home/Form/text/id/25/ty/1,U函数表达如下:
//下面三个表达是等效的 U('Form/text?id=25&ty=1') U('Form/text','id=25&ty=1') U('Form/text',array('id=>25','ty=>1'))
访问 http://www.bnzoo.com/Admin/Form/text/id/25/ty/1,U函数表达如下:
//下面三个表达是等效的 U('Admin/Form/text?id=25&ty=1') U('Admin/Form/text','id=25&ty=1') U('Admin/Form/text',array('id=>25','ty=>1'))
如果www.bnzoo.com和admin.bnzoo.com都指向当前应用的话,想通过 admin.bnzoo.com 访问 Admin/Form/text/id/25/ty/1,即访问 http://admin.bnzoo.com/Admin/Form/text/id/25/ty/1,U函数表达如下:
//下面三个表达是等效的 U('Admin/Form/text@admin.bnzoo.com?id=25&ty=1') U('Admin/Form/text@admin.bnzoo.com','id=25&ty=1') U('Admin/Form/text@admin.bnzoo.com',array('id=>25','ty=>1'))
如果设置了路由,U函数也能支持路由。比如我们定义一个路由规则:
'text/:id\d'=>'Index/text'
U函数下面的表达都是可以的:
U('/text/25')
U('Index/text?id=25')
假设当前地址是 http://www.bnzoo.com/Home/Index/index,那么它们生成的URL地址分别是:
http://www.bnzoo.com/Home/text/25 http://www.bnzoo.com/Home/Index/text/id/25