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; } }