您好,登錄后才能下訂單哦!
如何在thinkphp3.x中獲取變量?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
一、獲取變量
1.首先,我們來談下如何獲取變量。
第一種方式:傳統獲取方式,你仍然可以在開發過程中使用傳統方式獲取各種系統變量,例如:
$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方法不支持多個過濾方法。
關于如何在thinkphp3.x中獲取變量問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。