為了能夠動態的根據當前的URL設置生成對應的URL地址,ThinkPHP內置提供了U方法,用於URL的動態生成。
U方法的定義規則如下(方括號內參數根據實際應用覺得):
U('地址表達式',['參數'],['偽靜態后綴'],['顯示域名'])
地址表達式
地址表達式的格式定義如下:
地址表達式的格式定義如下:
1. [模塊/控制器/操作#錨點@域名]?參數1=值1&參數2=值2...
如果不定義模塊的話 就表示當前模塊名稱,下面是一些簡單的例子:
1 U('User/add'); //生成User控制器的add操作的URL地址 2 U('Blog/read?id=1'); //生成Blog控制器的read操作,並且id為1的URL地址 3 U('Admin/User/select'); //生成Admin模塊的User控制器的select操作的URL地址
參數
U方法的第二個參數支持數組和字符串兩種定義方式,如果只是字符串方式的參數可以在第一個參數中定義,例如:
1 U('Blog/cate', array('cate_id'=>1,'status'=>1)); 2 U('Blog/cate','cate_id=1&status=1'); 3 U('Blog/cate?cate_id=1&status=1');
但是不允許使用下面的定義方式來傳參數
1 U('Blog/cate/cate_id/1/status/1');
偽靜態后綴
U函數會自動識別當前配置的偽靜態后綴,如果你需要指定后綴生成URL地址的話,可以顯式傳入,例如:
U函數會自動識別當前配置的偽靜態后綴,如果你需要指定后綴生成URL地址的話,可以顯式傳入,例如:
1 U('Blog/cate','cate_id=1&status=1','xml');
自動識別
根據項目的不同URL設置,同樣的U方法調用可以智能地對應產生不同的URL地址效果,例如針對:
根據項目的不同URL設置,同樣的U方法調用可以智能地對應產生不同的URL地址效果,例如針對:
1 U('Blog/read?id=1');
這個定義為例。
如果當前URL設置為普通模式的話,最后生成的URL地址是:
如果當前URL設置為普通模式的話,最后生成的URL地址是:
1. http://serverName/index.php?m=Blog&a=read&id=1
如果當前URL設置為PATHINFO模式的話,同樣的方法最后生成的URL地址是:
1. http://serverName/index.php/Home/Blog/read/id/1
如果當前URL設置為REWRITE模式的話,同樣的方法最后生成的URL地址是:
1. http://serverName/Home/Blog/read/id/1
如果當前URL設置為REWRITE模式,並且設置了偽靜態后綴為.html的話,同樣的方法最后生成的URL地址是:
1. http://serverName/Home/Blog/read/id/1.html
如果開啟了URL_CASE_INSENSITIVE ,則會統一生成小寫的URL地址。
生成路由地址
U方法還可以支持路由,如果我們定義了一個路由規則為:
生成路由地址
U方法還可以支持路由,如果我們定義了一個路由規則為:
1 'news/:id\d'=>'News/read'
那么可以使用
U('/news/1');
最終生成的URL地址是:
1. http://serverName/index.php/Home/news/1
注意:如果你是在模板文件中直接使用U方法的話,需要采用 {:U('參數1', '參數2'…)} 的方式,具體參考模板的使用函數內容。
域名支持
如果你的應用涉及到多個子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:
如果你的應用涉及到多個子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:
1 U('Blog/read@blog.thinkphp.cn','id=1');
@后面傳入需要指定的域名即可
系統會自動判斷當前是否SSL協議,生成https:// 。
此外,U方法的第4個參數如果設置為true,表示自動識別當前的域名,並且會自動根據子域名部署設置APP_SUB_DOMAIN_DEPLOY 和APP_SUB_DOMAIN_RULES 自動匹配生成當前地址的子域名。
錨點支持
U函數可以直接生成URL地址中的錨點,例如:
此外,U方法的第4個參數如果設置為true,表示自動識別當前的域名,並且會自動根據子域名部署設置APP_SUB_DOMAIN_DEPLOY 和APP_SUB_DOMAIN_RULES 自動匹配生成當前地址的子域名。
錨點支持
U函數可以直接生成URL地址中的錨點,例如:
1 U('Blog/read#comment?id=1');
生成的URL地址可能是:
1. http://serverName/index.php/Home/Blog/read/id/1#comment