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/[email protected]?id=25&ty=1')
U('Admin/Form/[email protected]','id=25&ty=1')
U('Admin/Form/[email protected]',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
04-15 00:42