• 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 }
  • 相关阅读:
    学习 Linux 几点忠告【转载】
    游侠更新仙剑全系列免CD补丁(支持WIN7 SP1)【转载】
    更改数据库对象所有者
    数据库 行列相互转化
    JQuery计时器
    js操作cookies
    利用自定义DataTable来重画数据集的用法
    asp.net mvc 从客户端中检测到有潜在危险的 Request.Form 值的解决方法
    CS144 Lab
    CS231n Assignment #2
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/4303775.html
Copyright © 2020-2023  润新知