A方法
A方法用於在內部實例化控制器,呼叫格式:A(‘[項目://][分組/]模組','控制器層名稱')
最簡單的用法:
表示實例化目前專案的UserAction控制器(這個控制器對應的檔案位於Lib/Action/UserAction.class.),如果採用了分組模式,並且要實例化另一個Admin分組的控制器可用:
也支援跨專案實例化(專案的目錄要保持同級)
表示實例化Admin專案下面的UserAction控制器
.1版本增加了分層控制器的支持,所以也可以用A方法實例化其他的控制器,例如:
實例化UserEvent控制器(對應的檔案位於Lib/Event/UserEvent.class.)。
實例化控制器後,就可以呼叫該控制器中的方法,不過需要注意的情況是,在跨專案呼叫的情況下,如果你的操作方法有針對目前控制器的特殊變數操作,會有一些未知的問題,所以,一般來說,官方建議需要公共呼叫的控制器層單獨開發,不要有太多的依賴關係。
B方法
這是隨著行為應運而生的新生函數,可以執行某個行為,例如
C方法
C方法是Think用於設定、獲取,以及保存配置參數的方法,使用頻率較高。
了解C方法需要先了解下Think的配置,因為C方法的所有操作都是圍繞配置相關的。 Think的設定檔採用陣列格式定義。
由於採用了函數重載設計,所以用法較多,我們來一一說明下。
設定參數
D方法
D方法應該是用的比較多的方法了,用於實例化自定義模型類,是Think框架對Model類實例化的一種封裝,並實現了單例模式,支持跨項目和分組調用,呼叫格式如下:
D(‘[項目://][分組/]模型','模型層名稱')
方法的回傳值是實例化的模型物件。
D方法可以自動偵測模型類,如果存在自訂的模型類,則實例化自訂模型類,如果不存在,則會實例化Model基類,同時對於已實例化過的模型,不會重複去實例化。
D方法最常用的用法就是實例化目前專案的某個自訂模型,例如:
且第二次呼叫的時候無需再次實例化,可以減少一定的物件實例化開銷。
D方法可以支援跨分組和項目實例化模型,例如:
F方法
F方法其實是S方法的子集功能,只用於簡單資料緩存,只能支援檔案形式,不支援快取有效期,因為採用的是回傳方式,所以其效率較S方法較高,因此我們也稱之為快速快取方法。
F方法的特點是:
簡單資料緩存;
文件形式保存;
採用返回資料方式載入快取;
支援子目錄快取以及自動建立;
支援刪除快取和批次刪除;
寫入與讀取快取
G方法
Thinkphp長期以來需要透過debug_start、debug_end方法甚至Debug類別才能完成的功能,3.1版本中被一個簡單的G方法取代了,不可不謂是一次華麗升級。
G方法的功能包括標記位置和區間統計兩個功能,以下來看下具體用法:
標記位置
G方法的第一個用法就是標記位置,例如:
I方法
Thinkphp的I方法是3.1.3版本新增的,如果你是之前的3.*版本的話,可以直接參考使用3.1快速入門教程系列的變數部分。
概述
正如你所見到的一樣,I方法是Thinkphp眾多單字母函數中的新成員,其命名來自於英文Input(輸入),主要用於更方便和安全的獲取系統輸入變量,可以用於任何地方,用法格式如下:
I(‘變數類型.變數名稱',[‘預設值'],[‘過濾方法'])
變數類型是指請求方式或輸入類型,包括:
get 取得GET參數
post 取得POST參數
param 自動判斷請求類型取得GET、POST或PUT參數
request 取得REQUEST 參數
put 取得PUT 參數
session 取得 $_SESSION 參數
cookie 取得 $_COOKIE 參數
server 取得 $_SERVER 參數
globals 取得 $GLOBALS參數
注意:變數類型不區分大小寫。
變數名則嚴格區分大小寫。
預設值和過濾方法均屬於可選參數。
用法
我們以GET變數型別為例,說明下I方法的使用:
L方法
L方法用於啟用多語言的情況下,設定和取得目前的語言定義。
呼叫格式:L(‘語言變數',[‘語言值'])
設定語言變數
除了使用語言包定義語言變數之外,我們可以用L方法動態設定語言變量,例如:
M方法
M方法用來實例化一個基礎模型類,和D方法的差別在於:
、不需要自訂模型類,減少IO加載,效能較好;
、實例化後只能呼叫基礎模型類別(預設是Model類別)中的方法;
、可以在實例化的時候指定表前綴、資料庫和資料庫的連接資訊;
D方法的強大則體現在你封裝的自訂模型類別有多強,不過隨著新版Think框架的基礎模型類別的功能越來越強大,M方法也比D方法越來越實用了。
M方法的呼叫格式:
M(‘[基礎模型名:]模型名稱','資料表前綴','資料庫連接資訊')
我們來看下M方法具體有哪些用法:
、實例化基礎模型(Model) 類別
在沒有定義任何模型的時候,我們可以使用下面的方法實例化一個模型類別來進行操作:
因為系統的模型類別都能夠自動載入,因此我們不需要在實例化之前手動進行類別庫導入操作。模型類別CommonModel必須繼承Model。我們可以在CommonModel類裡面定義一些通用的邏輯方法,就可以省去為每個資料表定義具體的模型類,如果你的專案已經有超過100個資料表了,而大多數情況都是一些基本的CURD操作的話,只是個別模型有一些複雜的業務邏輯需要封裝,那麼第一種方式和第二種方式的結合就是一個不錯的選擇。
、傳入表前綴、資料庫和其他資訊
M方法有三個參數,第一個參數是模型名稱(可以包含基礎模型類別和資料庫),第二個參數用來設定資料表的前綴(留空則取目前項目配置的表格前綴),第三個參數用於設定目前使用的資料庫連線資訊(留空則取目前項目配置的資料庫連線資訊),例如:
R方法
R方法用來呼叫某個控制器的操作方法,是A方法的進一步增強和補充。關於A方法的用法請見這裡。
R方法的呼叫格式:
R(‘[項目://][分組/]模組/操作','參數','控制器層名稱')
例如,我們定義了一個操作方法為:
然後,使用R方法呼叫
也就是說,R方法的第三個參數支援指定所呼叫的控制器層。
同時,R方法呼叫操作方法的時候可以支援操作後綴設定C(‘ACTION_SUFFIX'),如果你設定了操作方法後綴,仍然不需要更改R方法的呼叫方式。
S方法
S方法也支援對目前的快取方式傳入快取參數,例如:
T方法
為了更方便的輸出範本文件,新版封裝了一個T函數用來產生範本文件名稱。
用法:
T([資源://][模組@][主題/][控制器/]操作,[視圖分層])
T函數的回傳值是一個完整的模板檔名,可以直接用於display和fetch方法進行渲染輸出。
例如:
U方法
U方法用於完成URL位址的組裝,特點在於可以自動根據目前的URL模式和設定產生對應的URL位址,格式為:
U(‘地址','參數','偽靜態','是否跳轉','顯示網域名稱');
在模板中使用U方法而不是固定寫死URL位址的好處在於,一旦你的環境變化或參數設定改變,你不需要更改模板中的任何程式碼。
在範本中的呼叫格式需要採用 {:U('位址', '參數'…)} 的方式
U方法的用法範例:
也可以支援分組呼叫:
當然,也可以只是寫操作名,表示呼叫目前模組的
除了分組、模組和操作名之外,我們也可以傳入一些參數:
U方法的第二個參數支援傳入參數,支援陣列和字串兩種定義方式,如果只是字串方式的參數可以在第一個參數中定義,下面幾種方式都是等效的:
但是不允許使用下面的定義方式來傳送參數:
根據專案的不同URL設置,同樣的U方法呼叫可以智慧地對應產生不同的URL位址效果,例如針對:
這個定義為例。
如果目前URL設定為普通模式的話,最後產生的URL位址是:
如果目前URL設定為PATHINFO模式的話,同樣的方法最後產生的URL位址是: http://serverName /index./Blog/read/id/1
如果目前URL設定為REWRITE模式的話,同樣的方法最後產生的URL位址是: http://serverName/Blog/read/id /1
如果你同時也設定了PATHINFO分隔符號的話:
就會產生
如果目前URL設定為REWRITE模式,並且設定了偽靜態後綴為html的話,同樣的方法最後產生的URL位址是:
如果設定了多個偽靜態支持,那麼會自動取第一個偽靜態後綴加到URL位址後面,當然你也可以手動在U方法裡面指定要產生的偽靜態後綴,例如:
就會產生
U方法也可以支援路由,如果我們定義了一個路由規則為:
那麼可以使用
最終產生的URL位址是:
如果你的應用程式涉及到多個子域名的操作位址,那麼也可以在U方法裡面指定需要產生位址的域名,例如:
@後面傳入需要指定的網域名稱即可。
此外,U方法的第5個參數如果設為true,表示自動識別目前的域名,並且會自動根據子網域部署設定APP_SUB_DOMAIN_DEPLOY和APP_SUB_DOMAIN_RULES自動比對產生目前位址的子網域。
如果開啟了URL_CASE_INSENSITIVE,則會統一產生小寫的URL位址。