请求对象

当前的请求对象由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.'); // 获取全部参数
    }
}

获取请求类型

在很多情况下面,我们需要判断当前操作的请求类型是GETPOSTPUTDELETE或者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请求类型'
        }
    }
}
powered by GitbookEdit Time: 2023-04-08 10:28:32