多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > ThinkPHP > ThinkPHP3.1快速入門(5)變量

ThinkPHP3.1快速入門(5)變量

來源:程序員人生   發布時間:2013-12-05 01:09:39 閱讀次數:3635次
本篇我們來學習如何在ThinkPHP中使用變量和對變量進行過濾。
在Web開發過程中,我們經常需要獲取系統變量或者用戶提交的數據,這些變量數據錯綜復雜,而且一不小心就容易引起安全隱患,但是如果利用好ThinkPHP提供的變量獲取功能,就可以輕松的獲取和駕馭變量了。
如果你使用的是3.1.3以上版本,那么可以直接參考新版的I函數用法,基本上涵蓋了本章的內容。

獲取變量

首先,我們來談下如何獲取變量。
第一種方式:傳統獲取方式
你仍然可以在開發過程中使用傳統方式獲取各種系統變量,例如:
$id = $_GET['id']; // 獲取get變量
$name = $_POST['name'];  // 獲取post變量
$value = $_SESSION['var']; // 獲取session變量
$name = $_COOKIE['name']; // 獲取cookie變量
$file =  $_SERVER['PHP_SELF']; // 獲取server變量
不建議直接使用傳統方式獲取,因為沒有統一的安全處理機制,后期如果調整的話,改起來會比較麻煩。
第二種方式:使用Action類提供的動態方法
系統的Action類提供了對系統變量的增強獲取方法,包括對GET、POST、PUT、REQUEST、SESSION、COOKIE、SERVER和GLOBALS參數,除了獲取變量值外,還提供變量過濾和默認值支持,用法很簡單,只需要在Action中調用下面方法:
$id = $this->_get('id'); // 獲取get變量
$name = $this->_post('name'); // 獲取post變量
$value = $this->_session('var'); // 獲取session變量
$name = $this->_cookie('name'); // 獲取cookie變量
$file =  $this->_server('PHP_SELF'); // 獲取server變量
調用格式為:
$this->方法名("變量名",["過濾方法"],["默認值"])
方法名可以支持:
方法名 含義
_get 獲取GET參數
_post 獲取POST參數
_param 自動判斷請求類型獲取GET、POST或者PUT參數
_request 獲取REQUEST參數
_put 獲取PUT參數
_session 獲取$_SESSION參數
_cookie 獲取$_COOKIE參數
_server 獲取$_SERVER參數
_globals 獲取$GLOBALS參數
變量名:(必須)是要獲取的系統變量的名稱
過濾方法:(可選)可以用任何的內置函數或者自定義函數名,如果沒有指定的話,采用默認的htmlspecialchars函數進行安全過濾(由DEFAULT_FILTER 參數配置),參數就是前面方法名獲取到的值,也就是說如果調用:
$this->_get("name");
最終調用的結果就是 htmlspecialchars($_GET["name"]),如果要改變過濾方法,可以使用:
$this->_get("name","strip_tags");
默認值:(可選)是要獲取的參數變量不存在的情況下設置的默認值,例如:
$this->_get("id","strip_tags",0);
如果$_GET["id"] 不存在的話,會返回0。
如果沒有設置任何默認值的話,系統默認返回NULL。
其他方法的用法類似。
看起來好像差別不大,但是有一個明顯的優勢,就是如果我需要增加或者改變對這些變量做統一的過濾,一般不需要修改變量獲取的代碼,只是在項目配置文件中增加一個配置參數即可,例如:
'DEFAULT_FILTER'=>'strip_tags'
對所有的采用動態方式獲取的變量使用strip_tags方法進行統一過濾,也可以支持多個過濾方法,例如:
'DEFAULT_FILTER'=>'strip_tags,htmlspecialchars'
表示先進行strip_tags過濾,然后再進行htmlspecialchars過濾。
如果你在獲取某個變量的時候 需要自定義過濾方法,則可以改成:
$name = $this->_post('content','trim,strip_tags'); // 獲取post變量并過濾
如果你在項目配置中設置了統一的變量過濾方法,但是希望對某些變量不進行過濾,則可以用:
$name = $this->_post('id','',0);
如果你的參數可能會來自于多個提交方式,那么可以使用_param方法來更方便的獲取,例如:
$this->_param('id');
當前為get方式提交的時候,就等效于
$this->_get('id');
當前為post方式提交的時候,就等效于
$this->_post('id');
如果為put方式提交的話,就等效于
$this->_put('id');
其優點自然很明顯,同一個方法可以接受不同提交類型的變量,不用手動做太多的判斷再來獲取不同的參數了。

獲取URL參數

在某些情況下面,我們還有一種獲取URL參數的特殊需求,一般來說,獲取URL參數是采用get變量的方式就夠用了,但是對于我們定制過的URL,或者采用了路由的情況下面,URL的參數可能會沒有規律,這個時候,我們可以采用另外一種方式來獲取。
例如,當前的URL地址是:
http://localhost/index.php/news/hello_world/thinkphp
我們要獲取其中的參數,可以用:
$this->_param(0); // 獲取news
$this->_param(1); // 獲取hello_world
$this->_param(2); // 獲取thinkphp
不過_param(數字) 方式的變量獲取,僅對PATHINFO模式URL地址有效

變量過濾

前面我們已經了解了如何使用Action類提供的方法來進行變量獲取和過濾了,但是在沒有調用這些動態方法的前提下,我們怎么來進行數據過濾呢?
ThinkPHP還提供了兩種方式來進行數據過濾操作:
第一:配置全局的變量過濾
這種情況是針對一些會在多使用的情況,可以通過配置全局過濾 簡化操作,例如在項目配置文件中添加參數:
'VAR_FILTERS'=>'strip_tags'
則會對全局的get和post變量進行過濾,其他類型的系統變量需要自行過濾。

第二:在寫入數據庫之前進行變量過濾
如果你的變量數據是要寫入到數據庫的話,可以在數據寫入數據庫之前調用filter方法對數據進行安全過濾,例如:
$this->data($data)->filter('strip_tags')->add();
在執行add方法之前,會對$data數據進行strip_tags過濾處理。但是,這種方式下面,filter方法不支持多個過濾方法。

總結

使用ThinkPHP,我們可以輕松地對系統變量的獲取和過濾,你的開發功力明顯提升了不少。加油,后面還會講解如何使用路由。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕乱码一二三四区 | 亚洲成在人线av | q欧美性猛交xxxx乱大交 | 久久亚洲国产精品五月天 | 2018精品国产一区二区 | 欧美日韩不卡中文字幕在线 | 久久免费精品一区二区 | 日本与大黑人xxxx | 欧美又粗又硬又黄又爽视频 | 黑人欧美一级毛片 | 最新国产在线播放 | 国产一区二区不卡视频 | 亚洲欧美精品 | 精品国产免费人成在线观看 | 中文字幕在线视频网站 | www.黄色免费| 亚洲日本一区二区三区 | 亚洲精品自拍愉拍第二页 | 亚洲日本天堂 | 精品视频在线观看免费 | 国产欧美精品三区 | 色精品一区二区三区 | 日本亚洲黄色 | 最近最新视频中文字幕4 | 亚洲天堂黄色 | 天堂福利视频在线观看 | 欧美最刺激好看的一级毛片 | 青青草原在线视频免费观看 | 大学生一一级毛片在线播放 | 久久久毛片免费全部播放 | 亚洲图片天堂 | 亚洲欧洲日产国码在线观看 | 亚洲欧美综合在线观看 | 欧美性天堂 | 欧美日韩成人在线视频 | 国产一精品一aⅴ一免费 | 69视频在线播放 | 337p日本欧洲亚洲大胆艺术图666 | www性| 亚洲福利三区 | 成人中文字幕在线高清 |