请求对象
当前的请求对象由think\Request
类负责,该类不需要单独实例化调用,通常使用依赖注入即可。在其它场合则可以使用think\facade\Request
静态类操作。
调用Request对象
如果没有继承BaseController
基础控制器,那么可以参考下面的例子
构造方法调用
<?php
namespace app\index\controller;
// 引用请求对象
use think\Request;
class Index
{
/**
* @var \think\Request Request实例
*/
protected $request;
/**
* 构造方法
* @param Request $request Request对象
* @access public
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function index()
{
return $this->request->param('name');
}
}
静态调用
在没有使用依赖注入的场合,可以通过Facade机制来静态调用请求对象的方法(注意use
引入的类库区别)
<?php
namespace app\index\controller;
use think\facade\Request;
class Index
{
public function index()
{
return Request::param('name');
}
}
助手函数
为了简化调用,系统还提供了request助手函数,可以在任何需要的时候直接调用当前请求对象
<?php
namespace app\index\controller;
class Index
{
public function index()
{
return request()->param('name');
}
}
继承BaseController基础控制器
<?php
namespace app\index\controller;
use app\BaseController;
class Index extends BaseController
{
public function index()
{
return $this->request->param('name','');
}
}
请求方法
<?php
namespace app\index\controller;
class Index
{
public function index()
{
// 获取域名或ip
echo request()->host();
// 当前包含协议的域名
echo request()->domain();
// 获取当前URL 参数 true => 完整的URL
echo request()->url(true);
// 获取当前URL
echo request()->baseUrl();
// 获取当前URL访问根地址
echo request()->root();
// 获取当前入口文件 参数 true => 完整的URL
echo request()->baseFile();
// 获取当前请求URL的pathinfo信息(含URL后缀)
echo request()->pathinfo();
// 获取当前URL的访问后缀
echo request()->ext();
// 当前请求类型
echo request()->method();
}
}
获取当前控制器和应用以及操作
<?php
namespace app\index\controller;
class Index
{
public function index()
{
// 获取当前控制器
echo request()->controller();
// 获取当前操作方法
echo request()->action();
}
}
获取变量
可以通过Request
对象完成全局输入变量的检测、获取和安全过滤
变量类型方法
方法 | 描述 |
---|---|
param | 获取当前请求的变量 |
get | 获取 $_GET 变量 |
post | 获取 $_POST 变量 |
put | 获取 PUT 变量 |
delete | 获取 DELETE 变量 |
session | 获取 SESSION 变量 |
cookie | 获取 $_COOKIE 变量 |
request | 获取 $_REQUEST 变量 |
server | 获取 $_SERVER 变量 |
env | 获取 $_ENV 变量 |
route | 获取 路由(包括PATHINFO) 变量 |
middleware | 获取 中间件赋值/传递的变量 |
file | 获取 $_FILES 变量 |
all V6.0.8+ | 获取包括 $_FILES 变量在内的请求变量,相当于param+file |
获取PARAM
变量
PARAM类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法
<?php
namespace app\index\controller;
// 引用Facade的request
use think\facade\Request;
class Index
{
public function index()
{
// 获取当前请求的name变量
Request::param('name');
// 获取当前请求的所有变量(经过过滤)
Request::param();
// 获取部分变量
Request::param(['name', 'email']);
// 助手函数
input('param.name'); // 获取单个参数
input('param.'); // 获取全部参数
// 下面是等效的
input('name');
input('');
}
}
获取GET变量
namespace app\index\controller;
// 引用Facade的request
use think\facade\Request;
class Index
{
public function index()
{
// 获取当前GET请求的某个变量
Request::get('id');
// 获取当前GET请求的所有变量(经过过滤)
Request::get();
// 获取部分变量
Request::get(['name', 'email']);
// 助手函数
input('get.name'); // 获取单个参数
input('get.'); // 获取全部参数
}
}
获取POST变量
namespace app\index\controller;
// 引用Facade的request
use think\facade\Request;
class Index
{
public function index()
{
// 获取当前POST请求的某个变量
Request::psot('id');
// 获取当前POST请求的所有变量(经过过滤)
Request::psot();
// 获取POST部分变量
Request::psot(['name', 'email']);
// 助手函数
input('post.name'); // 获取单个参数
input('post.'); // 获取全部参数
}
}
获取请求类型
在很多情况下面,我们需要判断当前操作的请求类型是GET
、POST
、PUT
、DELETE
或者HEAD
,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的请求。
请求对象Request
类提供了下列方法来获取或判断当前请求类型:
用途 | 方法 |
---|---|
获取当前请求类型 | method |
判断是否GET请求 | isGet |
判断是否POST请求 | isPost |
判断是否PUT请求 | isPut |
判断是否DELETE请求 | isDelete |
判断是否AJAX请求 | isAjax |
判断是否PJAX请求 | isPjax |
判断是否JSON请求 | isJson |
判断是否手机访问 | isMobile |
判断是否HEAD请求 | isHead |
判断是否PATCH请求 | isPatch |
判断是否OPTIONS请求 | isOptions |
判断是否为CLI执行 | isCli |
判断是否为CGI模式 | isCgi |
调用实例
namespace app\index\controller;
// 引用Facade的request
use think\facade\Request;
class Index
{
public function index()
{
if(Request::isGET())
{
return '这是GET请求类型'
}
if(Request::isPOST())
{
return '这是POST请求类型'
}
if(Request::isAjax())
{
return '这是Ajax请求类型'
}
}
}