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