在實例化的過程當中,常用D方法和M方法,這兩個方法的區別在於M方法實例化模型無需用戶爲每一個數據表定義模型類,若是D方法沒有找到定義的模型類,則會自動調用M方法。通俗一點說:M實例化參數是數據庫的表名。D實例化的是你本身在Model文件夾下面創建的模型文件
例如:$user = new UserModel();
等價於$user = D('user');
若是實例化的是一個空模型
例如 $Demo = new Model();
那麼它等價於 $Demo = M();
------------------------------------------------------------------------php
D和M的區別主要在於:M方法不須要建立模型類文件,M方法不會讀取模型類,因此默認狀況下自動驗證是無效的,可是能夠經過動態賦值的方式實現而D方法必須有建立模型類。咱們能夠用下面兩種方法去建立一個數據表的映射對象第一種:$Test = D('Test')第二種:$Test = new Model('Test')雖然這兩種均可以對數據進行select,insert,delete,udpate操做,在數據驗證上有很大的不一樣,用第一種方式實例一個模型就會有數據檢查功能,若是 title 沒有填寫的話就會提示 「請輸入標題」 (這個是tp提供的一個自動驗證功能,固然也須要在相應的model中定義好驗證條件);若是用第二種就沒有了·····還有1個區別就是當用了$trueTableName後,必須用$test=d('test'),表示查詢的是test表,若是用的是$test=m('test'),那麼都表示查詢的數據邊是think_test。thinkphp2.0版本測試有如此上面的問題html
-----------------------------------------------------------------------------------------------thinkphp
通俗點說:D就是實例化一個基於Model文件的Model。M則是經過直接實例化Model方法(ThinkPHP基類)來動態的實例化一個Model對象,即便這個對應的Model文件不存在數據庫
============================================================================數組
A快速實例化Action類庫緩存
B執行行爲類安全
C配置參數存取方法服務器
D快速實例化Model類庫cookie
F快速簡單文本數據存取方法session
L 語言參數存取方法
M快速高性能實例化模型
R快速遠程調用Action類方法
S快速緩存存取方法
U URL動態生成和重定向方法
W 快速Widget輸出方法
D函數實例化的是你當前項目的Lib/Model下面的模塊。若是該模塊不存在的話,直接返回實例化Model的對象(意義就與M()函數相同)。而M只返回,實例化Model的對象。它的$name參數做爲數據庫的表名來處理對數據庫的操做。
ThinkPHP函數詳解:U方法
U方法用於完成對URL地址的組裝,特色在於能夠自動根據當前的URL模式和設置生成對應的URL地址,格式爲:
U('地址','參數','僞靜態','是否跳轉','顯示域名');
在模板中使用U方法而不是固定寫死URL地址的好處在於,一旦你的環境變化或者參數設置改變,你不須要更改模板中的任何代碼。
在模板中的調用格式須要採用 {:U('地址', '參數'…)} 的方式
U方法的用法示例:
複製代碼
也能夠支持分組調用:
複製代碼
固然,也能夠只是寫操做名,表示調用當前模塊的
複製代碼
除了分組、模塊和操做名以外,咱們也能夠傳入一些參數:
複製代碼
U方法的第二個參數支持傳入參數,支持數組和字符串兩種定義方式,若是隻是字符串方式的參數能夠在第一個參數中定義,下面幾種方式都是等效的:
複製代碼
可是不容許使用下面的定義方式來傳參數:
複製代碼
根據項目的不一樣URL設置,一樣的U方法調用能夠智能地對應產生不一樣的URL地址效果,例如針對:
複製代碼
這個定義爲例。
若是當前URL設置爲普通模式的話,最後生成的URL地址是:
複製代碼
若是當前URL設置爲PATHINFO模式的話,一樣的方法最後生成的URL地址是:
複製代碼
若是當前URL設置爲REWRITE模式的話,一樣的方法最後生成的URL地址是:
複製代碼
若是你同時還設置了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地址。
3.1.2版本開始,U方法還能夠支持生成URL地址中的錨點,例如:
複製代碼
就會生成
複製代碼
若是域名和錨點同時使用的話,注意順序爲先錨點後域名,例如:
ThinkPHP函數詳解:I方法
正如你所見到的同樣,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方法的使用:
支持默認值:
採用方法過濾:
支持直接獲取整個變量類型,例如:
用一樣的方式,咱們能夠獲取post或者其餘輸入類型的變量,例如:
param變量類型是框架特有的支持自動判斷當前請求類型的變量獲取方式,例如:
若是當前請求類型是GET,那麼等效於 $_GET['id'],若是當前請求類型是POST或者PUT,那麼至關於獲取 $_POST['id'] 或者 PUT參數id。
而且param類型變量還能夠用數字索引的方式獲取URL參數(必須是PATHINFO模式參數有效,不管是GET仍是POST方式都有效),例如:
當前訪問URL地址是
那麼咱們能夠經過
事實上,param變量類型的寫法能夠簡化爲:
使用I方法的時候 變量其實通過了兩道過濾,首先是全局的過濾,全局過濾是經過配置VAR_FILTERS參數,這裏必定要注意,3.1版本以後,VAR_FILTERS參數的過濾機制已經更改成採用array_walk_recursive方法遞歸過濾了,主要對過濾方法的要求是必須引用返回,因此這裏設置htmlspecialchars是無效的,你能夠自定義一個方法,例如:
而後配置:
若是須要進行屢次過濾,能夠用:
filter_exp方法是框架內置的安全過濾方法,用於防止利用模型的EXP功能進行注入攻擊。
由於VAR_FILTERS參數設置的是全局過濾機制,並且採用的是遞歸過濾,對效率有所影響,因此,咱們更建議直接對獲取變量過濾的方式,除了在I方法的第三個參數設置過濾方法外,還能夠採用配置DEFAULT_FILTER參數的方式設置過濾,事實上,該參數的默認設置是:
也就說,I方法的全部獲取變量都會進行htmlspecialchars過濾,那麼:
一樣,該參數也能夠支持多個過濾,例如:
若是咱們在使用I方法的時候 指定了過濾方法,那麼就會忽略DEFAULT_FILTER的設置,例如:
I方法的第三個參數若是傳入函數名,則表示調用該函數對變量進行過濾並返回(在變量是數組的狀況下自動使用array_map進行過濾處理),不然會調用PHP內置的filter_var方法進行過濾處理,例如:
表示 會對$_POST['email'] 進行 格式驗證,若是不符合要求的話,返回空字符串。
(關於更多的驗證格式,能夠參考 官方手冊的filter_var用法。)
或者能夠用下面的字符標識方式:
能夠支持的過濾名稱必須是filter_list方法中的有效值(不一樣的服務器環境可能有所不一樣),可能支持的包括:
在有些特殊的狀況下,咱們不但願進行任何過濾,即便DEFAULT_FILTER已經有所設置,可使用:
一旦過濾參數設置爲NULL,即表示再也不進行任何的過濾。
TkinkPHP 3.2.3版本以後,I函數增長了變量修飾符的功能,方便過濾變量和轉換變量
如:
I('變量類型.變量名/修飾符')
可使用的修飾符包括:
修飾符 | 做用 |
---|---|
s | 強制轉換爲字符串類型 |
d | 強制轉換爲整形類型 |
b | 強制轉換爲布爾類型 |
a | 強制轉換爲數組類型 |
f | 強制轉換爲浮點類型 |
來自:tp手冊