# ThinkPHP函數詳解:U函數
[TOC]
U函數用于完成對URL地址的組裝,特點在于可以自動根據當前的URL模式和設置生成對應的URL地址,格式為:
>[success] **[模塊/控制器/操作#錨點@域名]?參數1=值1&參數2=值2...**
在模板中使用U函數而不是固定寫死URL地址的好處在于,一旦你的環境變化或者參數設置改變,你不需要更改模板中的任何代碼。
在模板中的調用格式需要采用 **{:U('地址', '參數'…)}** 的方式
## 基本用法
U方法的用法示例【當前默認為Home模塊】:
~~~
U('User/add') // 生成Home模塊User控制器的add操作地址 /Home/User/add.html
~~~
### 支持分模塊調用
~~~
U('Admin/User/add') // 生成Admin模塊的User控制器的add操作地址 /Admin/User/add.html
~~~
當然,也可以只是寫操作名,表示調用當前模塊的
~~~
U('add') // 生成當前訪問控制器的add操作地址。如訪問Article/index 則生成的地址為Article/add.html
~~~
### 傳入一些參數
~~~
U('Blog/read?id=1') // 生成Blog模塊的read操作 并且id為1的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')
~~~
但是不允許使用下面的定義方式來傳參數:
~~~
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
~~~
如果你同時還設置了PATHINFO分隔符的話:
~~~
'URL_PATHINFO_DEPR'=>'-'
~~~
就會生成
~~~
http://serverName/Blog-read-id-1
~~~
如果當前URL設置為REWRITE模式,并且設置了偽靜態后綴為html的話,同樣的方法最后生成的URL地址是:
~~~
http://serverName/Blog/read/id/1.html
~~~
如果設置了多個偽靜態支持,那么會自動取第一個偽靜態后綴添加到URL地址后面,當然你也可以手動在U方法里面指定要生成的偽靜態后綴,例如:
~~~
U('Blog/read','id=1','xml'); // 生成地址 http://serverName/Blog/read/id/1.xml
~~~
## 路由支持
U方法還可以支持路由,如果我們定義了一個路由規則為:
~~~
'news/:id\d'=>'News/read'
~~~
那么可以使用
~~~
U('/news/1'); //生成地址 http://serverName/index.php/news/1
~~~
## 域名支持
如果你的應用涉及到多個子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:
~~~
U('Blog/read@blog.thinkphp.cn','id=1'); // 生成地址 http://blog.thinkphp.cn/Home/Blog/read/id/1.html
~~~
@后面傳入需要指定的域名即可。
此外,U方法的第5個參數如果設置為true,表示自動識別當前的域名,并且會自動根據子域名部署設置APP_SUB_DOMAIN_DEPLOY和APP_SUB_DOMAIN_RULES自動匹配生成當前地址的子域名。
如果開啟了URL_CASE_INSENSITIVE,則會統一生成小寫的URL地址。
錨點支持
U方法還可以支持生成URL地址中的錨點,例如:
~~~
U('Blog/read#comment','id=1','html'); // 生成地址 http://serverName/Blog/read/id/1.html#comment
~~~
如果域名和錨點同時使用的話,注意順序為先錨點后域名,例如:
~~~
U('Blog/read#comment@blog.thinkphp.cn','id=1'); // 生成地址 http://blog.thinkphp.cn/Home/Blog/read/id/1.html#comment
~~~
- 開始
- PHP配置參數的介紹
- PHP代碼優化
- php中的命名空間
- PHP文件上傳類
- PHP文件下載
- PHP驗證碼
- ThinkPHP3.2 框架函數
- A函數:實例化控制器
- C函數:設置和獲取配置參數
- D函數:實例化模型
- F 函數:快速緩存設置和存取
- M函數:例化模型(無需定義模型類)
- L函數:設置和獲取語言變量
- S 函數:緩存設置和存取
- R函數:直接調用控制器的操作方法
- U函數:URL地址生成
- I 函數:安全獲取系統輸入變量
- 日志
- ThinkPHP在關閉調試模式導致函數被緩存
- MySQL觸發器使用時遇到的坑
- PHP常用函數
- 五一回家記錄
- window的PHP開發(wamp)下安裝redis擴展
- Windows下安裝使用Redis
- PHP7新特性
- 利用 phpmailer 類實現隊列發送郵件
- GD 庫圖像處理
- 檢測 PHP 模塊是否開啟
- GD 庫操作一般步驟
- GD 庫繪畫改變字體
- GD 繪制驗證碼
- GD 縮略圖實現
- GD 繪制水印
- 日期時間函數庫
- PHP 函數
- 無限極分類