ThinkPHP内置函数----I方法

虽然你仍然能够在开发过程当中使用传统方式获取各类系统变量,例如:php

$id    =  $_GET['id']; // 获取get变量$name  =  $_POST['name'];  // 获取post变量$value =  $_SESSION['var']; // 获取session变量$name  =  $_COOKIE['name']; // 获取cookie变量$file  =  $_SERVER['PHP_SELF']; // 获取server变量

可是咱们不建议直接使用传统方式获取,由于没有统一的安全处理机制,后期若是调整的话,改起来会比较麻烦。因此,更好的方式是在框架中统一使用I函数进行变量获取和过滤。html

I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,能够用于任何地方,用法格式以下:数组

I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源'])

变量类型是指请求方式或者输入类型,包括:安全

变量类型 含义
get 获取GET参数
post 获取POST参数
param 自动判断请求类型获取GET、POST或者PUT参数
request 获取REQUEST 参数
put 获取PUT 参数
session 获取 $_SESSION 参数
cookie 获取 $_COOKIE 参数
server 获取 $_SERVER 参数
globals 获取 $GLOBALS参数
path 获取 PATHINFO模式的URL参数(3.2.2新增)
data 获取 其余类型的参数,须要配合额外数据源参数(3.2.2新增)

注意:变量类型不区分大小写。
变量名则严格区分大小写。
默认值和过滤方法均属于可选参数。服务器

咱们以GET变量类型为例,说明下I方法的使用:cookie

echo I('get.id'); // 至关于 $_GET['id']echo I('get.name'); // 至关于 $_GET['name']

支持默认值:session

echo I('get.id',0); // 若是不存在$_GET['id'] 则返回0echo I('get.name',''); // 若是不存在$_GET['name'] 则返回空字符串

采用方法过滤:框架

// 采用htmlspecialchars方法对$_GET['name'] 进行过滤,若是不存在则返回空字符串echo I('get.name','','htmlspecialchars');

支持直接获取整个变量类型,例如:函数

// 获取整个$_GET 数组I('get.');

用一样的方式,咱们能够获取post或者其余输入类型的变量,例如:post

I('post.name','','htmlspecialchars'); // 采用htmlspecialchars方法对$_POST['name'] 进行过滤,若是不存在则返回空字符串I('session.user_id',0); // 获取$_SESSION['user_id'] 若是不存在则默认为0I('cookie.'); // 获取整个 $_COOKIE 数组I('server.REQUEST_METHOD'); // 获取 $_SERVER['REQUEST_METHOD']

param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:

echo I('param.id');

若是当前请求类型是GET,那么等效于 $_GET['id'],若是当前请求类型是POST或者PUT,那么至关于获取 $_POST['id'] 或者 PUT参数id。

因为param类型是I函数默认获取的变量类型,所以事实上param变量类型的写法能够简化为:

I('id'); // 等同于 I('param.id')I('name'); // 等同于 I('param.name')

3.2.2新增了path和data两个变量类型,用法以下:

path类型变量能够用于获取URL参数(必须是PATHINFO模式参数有效,不管是GET仍是POST方式都有效),例如:当前访问URL地址是 http://serverName/index.php/New/2013/06/01

那么咱们能够经过

echo I('path.1'); // 输出2013echo I('path.2'); // 输出06echo I('path.3'); // 输出01

data类型变量能够用于获取不支持的变量类型的读取,例如:

I('data.file1','','',$_FILES);
变量过滤

若是你没有在调用I函数的时候指定过滤方法的话,系统会采用默认的过滤机制(由DEFAULT_FILTER配置),事实上,该参数的默认设置是:

// 系统默认的变量过滤机制'DEFAULT_FILTER'        => 'htmlspecialchars'

也就说,I方法的全部获取变量若是没有设置过滤方法的话都会进行htmlspecialchars过滤,那么:

// 等同于 htmlspecialchars($_GET['name'])I('get.name');

一样,该参数也能够设置支持多个过滤,例如:

'DEFAULT_FILTER'        => 'strip_tags,htmlspecialchars'

设置后,咱们在使用:

// 等同于 htmlspecialchars(strip_tags($_GET['name']))I('get.name');

若是咱们在使用I方法的时候 指定了过滤方法,那么就会忽略DEFAULT_FILTER的设置,例如:

// 等同于 strip_tags($_GET['name'])echo I('get.name','','strip_tags');

I方法的第三个参数若是传入函数名,则表示调用该函数对变量进行过滤并返回(在变量是数组的状况下自动使用array_map进行过滤处理),不然会调用PHP内置的filter_var方法进行过滤处理,例如:

I('post.email','',FILTER_VALIDATE_EMAIL);

表示 会对$_POST['email'] 进行 格式验证,若是不符合要求的话,返回空字符串。(关于更多的验证格式,能够参考 官方手册的filter_var用法。)或者能够用下面的字符标识方式:

I('post.email','','email');

能够支持的过滤名称必须是filter_list方法中的有效值(不一样的服务器环境可能有所不一样),可能支持的包括:

intbooleanfloatvalidate_regexpvalidate_urlvalidate_emailvalidate_ipstringstrippedencodedspecial_charsunsafe_rawemailurlnumber_intnumber_floatmagic_quotescallback

在有些特殊的状况下,咱们不但愿进行任何过滤,即便DEFAULT_FILTER已经有所设置,可使用:

// 下面两种方式都不采用任何过滤方法I('get.name','','');I('get.id','',false);

一旦过滤参数设置为空字符串或者false,即表示再也不进行任何的过滤。

相关文章
相关标签/搜索