获取变量
首先,我们来谈下如何获取变量。第一种方式:传统获取方式
你仍然可以在开发过程中使用传统方式获取各种系统变量,例如:
- $id = $_GET['id']; // 获取get变量
- $name = $_POST['name']; // 获取post变量
- $value = $_SESSION['var']; // 获取session变量
- $name = $_COOKIE['name']; // 获取cookie变量
- $file = $_SERVER['PHP_SELF']; // 获取server变量
复制代码
第二种方式:使用Action类提供的动态方法
系统的Action类提供了对系统变量的增强获取方法,包括对GET、POST、PUT、REQUEST、SESSION、COOKIE、SERVER和GLOBALS参数,除了获取变量值外,还提供变量过滤和默认值支持,用法很简单,只需要在Action中调用下面方法:
- $id = $this->_get('id'); // 获取get变量
- $name = $this->_post('name'); // 获取post变量
- $value = $this->_session('var'); // 获取session变量
- $name = $this->_cookie('name'); // 获取cookie变量
- $file = $this->_server('PHP_SELF'); // 获取server变量
复制代码
$this->方法名("变量名",["过滤方法"],["默认值"])
方法名可以支持:
方法名 | 含义 |
---|---|
_get | 获取GET参数 |
_post | 获取POST参数 |
_param | 自动判断请求类型获取GET、POST或者PUT参数 |
_request | 获取REQUEST参数 |
_put | 获取PUT参数 |
_session | 获取$_SESSION参数 |
_cookie | 获取$_COOKIE参数 |
_server | 获取$_SERVER参数 |
_globals | 获取$GLOBALS参数 |
过滤方法:(可选)可以用任何的内置函数或者自定义函数名,如果没有指定的话,采用默认的htmlspecialchars函数进行安全过滤(由DEFAULT_FILTER 参数配置),参数就是前面方法名获取到的值,也就是说如果调用:
- $this->_get("name");
复制代码
- $this->_get("name","strip_tags");
复制代码
- $this->_get("id","strip_tags",0);
复制代码
如果没有设置任何默认值的话,系统默认返回NULL。
其他方法的用法类似。
看起来好像差别不大,但是有一个明显的优势,就是如果我需要增加或者改变对这些变量做统一的过滤,一般不需要修改变量获取的代码,只是在项目配置文件中增加一个配置参数即可,例如:
- 'DEFAULT_FILTER'=>'strip_tags'
复制代码
- 'DEFAULT_FILTER'=>'strip_tags,htmlspecialchars'
复制代码
如果你在获取某个变量的时候 需要自定义过滤方法,则可以改成:
- $name = $this->_post('content','trim,strip_tags'); // 获取post变量并过滤
复制代码
- $name = $this->_post('id','',0);
复制代码
- $this->_param('id');
复制代码
- $this->_get('id');
复制代码
- $this->_post('id');
复制代码
- $this->_put('id');
复制代码
获取URL参数
在某些情况下面,我们还有一种获取URL参数的特殊需求,一般来说,获取URL参数是采用get变量的方式就够用了,但是对于我们定制过的URL,或者采用了路由的情况下面,URL的参数可能会没有规律,这个时候,我们可以采用另外一种方式来获取。例如,当前的URL地址是:
- http://localhost/index.php/news/hello_world/thinkphp
复制代码
- $this->_param(0); // 获取news
- $this->_param(1); // 获取hello_world
- $this->_param(2); // 获取thinkphp
复制代码
变量过滤
前面我们已经了解了如何使用Action类提供的方法来进行变量获取和过滤了,但是在没有调用这些动态方法的前提下,我们怎么来进行数据过滤呢?ThinkPHP还提供了两种方式来进行数据过滤操作:
第一:配置全局的变量过滤
这种情况是针对一些会在多使用的情况,可以通过配置全局过滤 简化操作,例如在项目配置文件中添加参数:
- 'VAR_FILTERS'=>'strip_tags'
复制代码
第二:在写入数据库之前进行变量过滤
如果你的变量数据是要写入到数据库的话,可以在数据写入数据库之前调用filter方法对数据进行安全过滤,例如:
- $this->data($data)->filter('strip_tags')->add();
复制代码