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参数(.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",);
如果$_GET["id"] 不存在的话,会返回0。
不过滤
$this->_get('id',false);
$this->_post('id',false);
//或者
$this->_get('id','');
$this->_post('id','');
还可以用_param方法获取URL中的参数
$this->_param(); // 获取PATHINFO地址中的第一个参数
$this->_param(); // 获取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;
}
}
thinkphp中的_get,_post,_request的更多相关文章
- $_GET $_POST $_REQUEST
<form action="__APP__/View/editArticle?id=5" method="GET"> <form>表单提 ...
- PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究
假设要获取$_GET['c']; 首先,先介绍下http_globals; 1.http_globals,定义在php_globals.h中: zval * http_globals[6]; 其中的索 ...
- PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功能
在之前的学习过程中我们接触过前后台数据请求交互的方法有表单提交.AJAX请求以及Angularjs中的$http,今天我们尝试在PHP中使用 $_GET 与$_POST 实现简单的前后台数据传输交互功 ...
- ThinkPHP中的跨控制器调用与框架执行流程
一.跨控制器调用 UserController.class.php <?php namespace Home/Controller use Think/Controller class User ...
- ThinkPHP中的视图二
ThinkPHP中的视图 1.模板注释 在实际项目开发中,经常要使用注释功能,如果是ThinkPHP框架,则可以在模板文件中使用如下方式进行注释: {// 注释内容 } :单行注释 {/* 注释内容 ...
- ThInkPHP中的常量
除了常规变量的输出外,模板引擎还支持系统变量和系统常量.以及系统特殊变量的输出.它们的输出不需要事先赋值给某个模板变量.系统变量的输出必须以$Think.打头,并且仍然可以支持使用函数.常用的系统变量 ...
- thinkphp中URL传参数的几种方式
在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数 单个参数这种比较简单,例如 想像edit操作里面传递一个id值,如下写法_ ...
- Thinkphp中的 I 函数(Thinkphp3.2.3版本)
I 函数的作用是获取系统变量,必要时还可以对变量值进行过滤及强制转化,I 函数的语法格式: I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'],['额外数据源']) 一.获取变量 ...
- ***ThinkPHP中的常用方法汇总总结:M方法,D方法,U方法,I方法
thinkPHP中M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会自动调用M方法 ...
随机推荐
- GitHub好站点
https://github.com/XingCloud/stream_processor
- jQuery插件之Form
一.jQuery.Form.js 插件的作用是实现Ajax提交表单. 方法: 1.formSerilize() 用于序列化表单中的数据,并将其自动整理成适合AJAX异步请求的URL地址格式. 2.cl ...
- C# json Helper
using System; using System.Collections.Generic; using System.Data; using System.Text; namespace Comm ...
- UESTC_魔法少女小蟹 CDOJ 710
小蟹是一名魔法少女,能熟练的施放很多魔法. 有一天魔法学院上课的时候出现了这样一道题,给一个6位数,让大家用自己的魔法,把这个6位数变成另一个给定的6位数. 小蟹翻了下魔法书,发现她有以下6种魔法: ...
- kindeditor在sae上传文件修改,适合php
kindeditor在sae上传文件修改,适合php 当前位置: 首页 > 论坛 > 经验共享 用户登录 新用户注册 主题: kindeditor在sae上传文件修改,适合ph ...
- [Ext JS 4] 实战之多选下拉单 (带checkbox)
前言 Ext js 创建一个多选下拉单的方式很简单, 使用Ext.form.ComboBox, 设置 multiSelect 为true 就可以了. 但是如果要在每个下拉之前加上一个checkbox, ...
- Java Service Wrapper
Java Service Wrapper 将Java 应用程序部署成Windows系统服务Java Service Wrapper 1 Product Overview 1 Editions 2 Me ...
- Windows7&IIS7.5部署Discuz
IIS CGI一定要安装 IIS 网站中添加关联程序 ,添加默认文档 http://www.cnblogs.com/ajunForNet/archive/2012/09/12/2682063.html
- Unity 人物跟谁手指的移动(第一种方式)
长夜漫漫无心睡眠,敲敲代码,越敲越来劲! 我发现好多小朋友都在玩熊出没之xxxx这个游戏,居然打了一下午都没玩通第2关,我把测试也叫来陪我一起玩! 结果他也打不通,我再去叫策划,他也没打过,我去叫主管 ...
- where 1=1
sql: where 1=1 1=1 永真, 1<>1 永假. 1<>1 的用处: 用于只取结构不取数据的场合 例如: 拷贝表 create table_name as ...