ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 请求变量 ThinkPHP5使用了请求对象(由think\Request类实现)来记录当前请求的相关信息和执行相关操作,而获取请求变量是请求对象的一个重要用途。 例如,在原生PHP开发中经常会被使用的 $_GET、$_POST、$_SESSION和$_COOKIE等变量都被统一封装到请求对象的方法里面,取而代之的是使用请求对象的get()、post()、session()和 cookie()方法来获取当前请求的系统变量。 为什么要用请求对象的方法来替代原生的系统变量呢?首先直接操作系统变量存在很多的不便和不足,例如大写变量、不支持过滤和批量读取、排除等等细节,其次,也不利于单元测试。 在控制器操作方法中获取请求变量的方法如下: ~~~ <?php namespace app\index\controller; use think\Request; class Index { public function hello() { // 获取当前的GET变量 dump(Request::instance()->get()); // 或者使用助手函数 dump(request()->get()); } } ~~~ `request`函数是系统提供的一个简化读取的助手函数,用于获取当前请求对象的单例。在`ThinkPHP5`中,你不需要根据当前请求类型来判断使用`get()`还是`post()`方法(事实上这是一个很愚蠢的做法),框架提供了一个专门的`param()`方法来统一获取当前请求的变量,会自动识别当前的请求类型(支持`PUT`/`DELETE`等所有的请求类型)获取不同的请求变量,例如: ~~~ <?php namespace app\index\controller; use think\Request; class Index { public function hello() { // 获取当前的请求变量 dump(Request::instance()->param()); // 或者使用助手函数 dump(request()->param()); } } ~~~ 获取单个变量的方式 ~~~ <?php namespace app\index\controller; use think\Request; class Index { public function hello() { // 获取当前的请求变量 dump(Request::instance()->param('name')); // 或者使用助手函数 dump(request()->param('name')); } } ~~~ 官方的建议是最好弃用get()、post() 这些方法,直接使用param()方法。 param方法的优势包括:支持统一过滤以及更方便的调用多级变量,下面举个例子说明。 > 框架默认并没有设置任何的过滤机制,请根据应用的需要设置全局的过滤规则。 首先设置全局过滤规则如下: ~~~ // 默认全局过滤方法 'default_filter' => 'htmlspecialchars', ~~~ 控制器的hello方法改为: ~~~ <?php namespace app\index\controller; use think\Request; class Index { public function hello() { // 获取当前的请求变量 dump(Request::instance()->param('data.name', '', 'strtoupper')); // 或者使用助手函数 dump(request()->param('data.name', '', 'strtoupper')); } } ~~~ 如果要判断某个请求变量是否存在,可以使用: ~~~ <?php namespace app\index\controller; use think\Request; class Index { public function hello() { // 判断变量是否存在(当前请求变量中) dump(request()->has('name')); // 判断是否存在get变量 dump(request()->has('name', 'get')); // 或者使用助手函数 dump(input('?name')); dump(input('?get.name')); } } ~~~ 系统还提供了获取多个变量的筛选方法(不是获取所有变量): ~~~ <?php namespace app\index\controller; class Index { public function hello() { // 获取请求变量中的id和name变量 dump(request()->only('id,name')); // 获取请求变量中的id以外的变量 dump(request()->except('id')); } } ~~~ `only`表示只获取部分变量,`except`表示获取除了排除变量之外的所有变量 在模板文件中输出请求变量,可以无需进行模板变量赋值而是直接输出即可,方式如下: ~~~ {// 输出name请求变量 } {$Request.param.name} ~~~ ![](https://box.kancloud.cn/83596907e25afa981ed0afc7b5dc7add_387x589.png)