zoukankan      html  css  js  c++  java
  • thinkphp中的_get,_post,_request

    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;
            }
        }
  • 相关阅读:
    Django admin的一些有用定制
    django后台中如何在result_list内优雅的显示及使用过滤器?
    DataFrame 的函数
    pandas的替换和部分替换(replace)
    HTML5中的Web Notification桌面右下角通知功能的实现
    sqlalchemy 实现select for update
    SQLAlchemy 使用经验 (查询 事务 锁表)
    concat()
    某数据防泄漏 越权修改管理员密码
    齐治堡垒机 远程命令执行漏洞[CNVD-2019-20835]
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/4993602.html
Copyright © 2011-2022 走看看