thinkphp I方法取傳參


  1 /**
  2  * 獲取輸入參數 支持過濾和默認值
  3  * 使用方法:
  4  * <code>
  5  * I('id',0); 獲取id參數 自動判斷get或者post
  6  * I('post.name','','htmlspecialchars'); 獲取$_POST['name']
  7  * I('get.'); 獲取$_GET
  8  * </code>
  9  * @param string $name 變量的名稱 支持指定類型
 10  * @param mixed $default 不存在的時候默認值
 11  * @param mixed $filter 參數過濾方法
 12  * @param mixed $datas 要獲取的額外數據源
 13  * @return mixed
 14  */
 15 function I($name,$default='',$filter=null,$datas=null) {
 16     if(strpos($name,'/')){ // 指定修飾符
 17         list($name,$type)     =    explode('/',$name,2);
 18     }elseif(C('VAR_AUTO_STRING')){ // 默認強制轉換為字符串
 19         $type   =   's';
 20     }
 21     if(strpos($name,'.')) { // 指定參數來源
 22         list($method,$name) =   explode('.',$name,2);
 23     }else{ // 默認為自動判斷
 24         $method =   'param';
 25     }
 26     switch(strtolower($method)) {
 27         case 'get'     :   $input =& $_GET;break;
 28         case 'post'    :   $input =& $_POST;break;
 29         case 'put'     :   parse_str(file_get_contents('php://input'), $input);break;
 30         case 'param'   :
 31             switch($_SERVER['REQUEST_METHOD']) {
 32                 case 'POST':
 33                     $input  =  $_POST;
 34                     break;
 35                 case 'PUT':
 36                     parse_str(file_get_contents('php://input'), $input);
 37                     break;
 38                 default:
 39                     $input  =  $_GET;
 40             }
 41             break;
 42         case 'path'    :   
 43             $input  =   array();
 44             if(!empty($_SERVER['PATH_INFO'])){
 45                 $depr   =   C('URL_PATHINFO_DEPR');
 46                 $input  =   explode($depr,trim($_SERVER['PATH_INFO'],$depr));            
 47             }
 48             break;
 49         case 'request' :   $input =& $_REQUEST;   break;
 50         case 'session' :   $input =& $_SESSION;   break;
 51         case 'cookie'  :   $input =& $_COOKIE;    break;
 52         case 'server'  :   $input =& $_SERVER;    break;
 53         case 'globals' :   $input =& $GLOBALS;    break;
 54         case 'data'    :   $input =& $datas;      break;
 55         default:
 56             return NULL;
 57     }
 58     if(''==$name) { // 獲取全部變量
 59         $data       =   $input;
 60         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
 61         if($filters) {
 62             if(is_string($filters)){
 63                 $filters    =   explode(',',$filters);
 64             }
 65             foreach($filters as $filter){
 66                 $data   =   array_map_recursive($filter,$data); // 參數過濾
 67             }
 68         }
 69     }elseif(isset($input[$name])) { // 取值操作
 70         $data       =   $input[$name];
 71         $filters    =   isset($filter)?$filter:C('DEFAULT_FILTER');
 72         if($filters) {
 73             if(is_string($filters)){
 74                 $filters    =   explode(',',$filters);
 75             }elseif(is_int($filters)){
 76                 $filters    =   array($filters);
 77             }
 78             
 79             foreach($filters as $filter){
 80                 if(function_exists($filter)) {
 81                     $data   =   is_array($data) ? array_map_recursive($filter,$data) : $filter($data); // 參數過濾
 82                 }elseif(0===strpos($filter,'/')){
 83                     // 支持正則驗證
 84                     if(1 !== preg_match($filter,(string)$data)){
 85                         return   isset($default) ? $default : NULL;
 86                     }
 87                 }else{
 88                     $data   =   filter_var($data,is_int($filter) ? $filter : filter_id($filter));
 89                     if(false === $data) {
 90                         return   isset($default) ? $default : NULL;
 91                     }
 92                 }
 93             }
 94         }
 95         if(!empty($type)){
 96             switch(strtolower($type)){
 97                 case 'a':    // 數組
 98                     $data     =    (array)$data;
 99                     break;
100                 case 'd':    // 數字
101                     $data     =    (int)$data;
102                     break;
103                 case 'f':    // 浮點
104                     $data     =    (float)$data;
105                     break;
106                 case 'b':    // 布爾
107                     $data     =    (boolean)$data;
108                     break;
109                 case 's':   // 字符串
110                 default:
111                     $data   =   (string)$data;
112             }
113         }
114     }else{ // 變量默認值
115         $data       =    isset($default)?$default:NULL;
116     }
117     is_array($data) && array_walk_recursive($data,'think_filter');
118     return $data;
119 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM