轉載來自:https://www.cnblogs.com/jiqing9006/p/4993602.html
===================================================
ThinkPHP沒有改變原生的PHP系統變量獲取方式,所以依然可以通過$_GET、 $_POST、$_SERVER、$_REQUEST 等方式
來獲取系統變量,不過系統的Action類提供了對系統變量的增強獲取方法,包括對GET、POST、PUT、REQUEST、
SESSION、COOKIE、SERVER和GLOBALS參數,除了獲取變量值外,還提供變量過濾和默認值支持,用法很簡單,只需
要在Action中調用下面方法:
$this->方法名("變量名",["過濾方法"],["默認值"])
_get 獲取GET參數
_post 獲取POST參數
_param 自動判斷請求類型獲取GET、POST或者PUT參數(3.1新增)
_request 獲取REQUEST 參數
_put 獲取PUT 參數
_session 獲取 $_SESSION 參數
_cookie 獲取 $_COOKIE 參數
_server 獲取 $_SERVER 參數
_globals 獲取 $GLOBALS參數
可以用任何的內置函數或者自定義函數名,如果沒有指定的話,採用默認的htmlspecialchars函數進行安全過濾(由DEFAULT_FILTER 參數配置),參數就是前面方法名獲取到的值,也就是說如果調用:
$this->_get("name");
最終調用的結果就是 htmlspecialchars($_GET["name"]),如果要改變過濾方法,可以使用:
$this->_get("id","strip_tags",0);
如果$_GET["id"] 不存在的話,會返回0。
不過濾
$this->_get('id',false);
$this->_post('id',false);
//或者
$this->_get('id','');
$this->_post('id','');
還可以用_param方法獲取URL中的參數
$this->_param(0); // 獲取PATHINFO地址中的第一個參數
$this->_param(2); // 獲取PATHINFO地址中的第3個參數
thinkphp源碼
/**
* 魔術方法 有不存在的操作的時候執行
* @access public
* @param string $method 方法名
* @param array $args 參數
* @return mixed
*/
public function __call($method,$args) {
if( 0 === strcasecmp($method,ACTION_NAME.C('ACTION_SUFFIX'))) {
if(method_exists($this,'_empty')) {
// 如果定義了_empty操作 則調用
$this->_empty($method,$args);
}elseif(file_exists_case(C('TEMPLATE_NAME'))){
// 檢查是否存在默認模版 如果有直接輸出模版
$this->display();
}elseif(function_exists('__hack_action')) {
// hack 方式定義擴展操作
__hack_action();
}else{
_404(L('_ERROR_ACTION_').':'.ACTION_NAME);
}
}else{
switch(strtolower($method)) {
// 判斷提交方式
case 'ispost' :
case 'isget' :
case 'ishead' :
case 'isdelete' :
case 'isput' :
return strtolower($_SERVER['REQUEST_METHOD']) == strtolower(substr($method,2));
// 獲取變量 支持過濾和默認值 調用方式 $this->_post($key,$filter,$default);
case '_get' : $input =& $_GET;break;
case '_post' : $input =& $_POST;break;
case '_put' : parse_str(file_get_contents('php://input'), $input);break;
case '_param' :
switch($_SERVER['REQUEST_METHOD']) {
case 'POST':
$input = $_POST;
break;
case 'PUT':
parse_str(file_get_contents('php://input'), $input);
break;
default:
$input = $_GET;
}
if(C('VAR_URL_PARAMS')){
$params = $_GET[C('VAR_URL_PARAMS')];
$input = array_merge($input,$params);
}
break;
case '_request' : $input =& $_REQUEST; break;
case '_session' : $input =& $_SESSION; break;
case '_cookie' : $input =& $_COOKIE; break;
case '_server' : $input =& $_SERVER; break;
case '_globals' : $input =& $GLOBALS; break;
default:
throw_exception(__CLASS__.':'.$method.L('_METHOD_NOT_EXIST_'));
}
if(!isset($args[0])) { // 獲取全局變量
$data = $input; // 由VAR_FILTERS配置進行過濾
}elseif(isset($input[$args[0]])) { // 取值操作
$data = $input[$args[0]];
$filters = isset($args[1])?$args[1]:C('DEFAULT_FILTER');
if($filters) {// 2012/3/23 增加多方法過濾支持
$filters = explode(',',$filters);
foreach($filters as $filter){
if(function_exists($filter)) {
$data = is_array($data)?array_map($filter,$data):$filter($data); // 參數過濾
}
}
}
}else{ // 變量默認值
$data = isset($args[2])?$args[2]:NULL;
}
return $data;
}
}