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方法的使用: echoi('get.id');//相當於$_get['id'] echoi('get.name');//相當於$_get['name']
複製**
支援預設值: echoi('get.id',0);//如果不存在$_get['id']則返回0 echoi('get.name','');//如果不存在$_get['name']則返回空字串
複製**
採用方法過濾: echoi('get.name','','htmlspecialchars');//採用htmlspecialchars方法對$_get['name']進行過濾,如果不存在則返回空字串
複製**
支援直接獲取整個變數型別,例如: i('get.');//獲取整個$_get陣列
複製**
用同樣的方式,我們可以獲取post或者其他輸入型別的變數,例如: i('post.name','','htmlspecialchars');//採用htmlspecialchars方法對$_post['name']進行過濾,如果不存在則返回空字串 i('session.user_id',0);//獲取$_session['user_id']如果不存在則預設為0 i('cookie.');//獲取整個$_cookie陣列 i('server.request_method');//獲取$_server['request_method']
複製**
param變數型別是框架特有的支援自動判斷當前請求型別的變數獲取方式,例如: echoi('param.id');
複製**
如果當前請求型別是get,那麼等效於 $_get['id'],如果當前請求型別是post或者put,那麼相當於獲取 $_post['id'] 或者 put引數id。
並且param型別變數還可以用數字索引的方式獲取url引數(必須是pathinfo模式引數有效,無論是get還是post方式都有效),例如:
當前訪問url位址是 http://servername/index.php/new/2013/06/01
複製**
那麼我們可以通過 echoi('param.1');//輸出2013 echoi('param.2');//輸出06 echoi('param.3');//輸出01
複製**
事實上,param變數型別的寫法可以簡化為: i('id');//等同於i('param.id') i('name');//等同於i('param.name')
複製**
使用i方法的時候 變數其實經過了兩道過濾,首先是全域性的過濾,全域性過濾是通過配置var_filters引數,這裡一定要注意,3.1版本之後,var_filters引數的過濾機制已經更改為採用array_walk_recursive方法遞迴過濾了,主要對過濾方法的要求是必須引用返回,所以這裡設定htmlspecialchars是無效的,你可以自定義乙個方法,例如: functionfilter_default(&$value)
複製**
然後配置: 'var_filters'=>'filter_default'
複製**
如果需要進行多次過濾,可以用: 'var_filters'=>'filter_default,filter_exp'
複製**
filter_exp方法是框架內建的安全過濾方法,用於防止利用模型的exp功能進行注入攻擊。
因為var_filters引數設定的是全域性過濾機制,而且採用的是遞迴過濾,對效率有所影響,所以,我們更建議直接對獲取變數過濾的方式,除了在i方法的第三個引數設定過濾方法外,還可以採用配置default_filter引數的方式設定過濾,事實上,該引數的預設設定是: 'default_filter'=>'htmlspecialchars'
複製**
也就說,i方法的所有獲取變數都會進行htmlspecialchars過濾,那麼: i('get.name');//等同於htmlspecialchars($_get['name'])
複製**
同樣,該引數也可以支援多個過濾,例如: 'default_filter'=>'strip_tags,htmlspecialchars'
複製**
i('get.name');//等同於htmlspecialchars(strip_tags($_get['name']))
複製**
如果我們在使用i方法的時候 指定了過濾方法,那麼就會忽略default_filter的設定,例如: echoi('get.name','','strip_tags');//等同於strip_tags($_get['name'])
複製**
i方法的第三個引數如果傳入函式名,則表示呼叫該函式對變數進行過濾並返回(在變數是陣列的情況下自動使用array_map進行過濾處理),否則會呼叫php內建的filter_var方法進行過濾處理,例如: i('post.email','',filter_validate_email);
複製**
表示 會對$_post['email'] 進行 格式驗證,如果不符合要求的話,返回空字串。
ThinkPHP函式詳解 I方法
其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 post 獲取post引數 param 自動判斷請求型別獲取get pos...
ThinkPHP函式詳解 I方法
正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...
ThinkPHP函式詳解 I方法
正如你所見到的一樣,i方法是thinkphp眾多單字母函式中的新成員,其命名來自於英文input 輸入 主要用於更加方便和安全的獲取系統輸入變數,可以用於任何地方,用法格式如下 i 變數型別.變數名 預設值 過濾方法 變數型別是指請求方式或者輸入型別,包括 變數型別 含義get 獲取get引數 po...