转载来自: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;
}
}