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