thinkphp中url的生成U()方法

桃子紅了吶發表於2016-11-28

為了配合所使用的URL模式,我們需要能夠動態的根據當前的URL設定生成對應的URL地址,為此,ThinkPHP內建提供了U方法,用於URL的動態生成,可以確保專案在移植過程中不受環境的影響。

U方法的定義規則如下(方括號內引數根據實際應用決定):

U(`[分組/模組/操作]?引數` [,`引數`,`偽靜態字尾`,`是否跳轉`,`顯示域名`])

如果不定義專案和模組的話 就表示當前專案和模組名稱,下面是一些簡單的例子:

U(`User/add`) // 生成User模組的add操作的URL地址
U(`Blog/read?id=1`) // 生成Blog模組的read操作 並且id為1的URL地址
U(`Admin/User/select`) // 生成Admin分組的User模組的select操作的URL地址

U方法的第二個引數支援陣列和字串兩種定義方式,如果只是字串方式的引數可以在第一個引數中定義,例如:

U(`Blog/cate`,array(`cate_id`=>1,`status`=>1))
U(`Blog/cate`,`cate_id=1&status=1`)
U(`Blog/cate?cate_id=1&status=1`)

三種方式是等效的,都是 生成Blog模組的cate操作 並且cate_id為1 status為1的URL地址

但是不允許使用下面的定義方式來傳引數

U(`Blog/cate/cate_id/1/status/1`)

根據專案的不同URL設定,同樣的U方法呼叫可以智慧地對應產生不同的URL地址效果,例如針對

U(`Blog/read?id=1`)這個定義為例。

如果當前URL設定為普通模式的話,最後生成的URL地址是: 

http://serverName/index.php?m=Blog&a=read&id=1

如果當前URL設定為PATHINFO模式的話,同樣的方法最後生成的URL地址是: 

http://serverName/index.php/Blog/read/id/1

如果當前URL設定為REWRITE模式的話,同樣的方法最後生成的URL地址是: 

http://serverName/Blog/read/id/1

如果當前URL設定為REWRITE模式,並且設定了偽靜態字尾為.html的話,同樣的方法最後生成的URL地址是: 

http://serverName/Blog/read/id/1.html

 

注意:如果你是在模板檔案中直接使用U方法的話,需要採用 {:U(`引數1`, `引數2`…)} 的方式

本文轉自TBHacker部落格園部落格,原文連結:http://www.cnblogs.com/jiqing9006/p/5000825.html,如需轉載請自行聯絡原作者


相關文章