又看到请求这一部分,个人认为这部分是算重要的一部分 单独记一篇笔记。

0x01 request请求对象

如果要获取当前的请求信息,可以使用\think\Request类,完全开发手册中也有提到,继承系统控制器类可以直接调用 Request 类

来看看thinkphp中的源码:

 /**
     * 构造方法
     * @param Request $request Request对象
     * @access public
     */
    public function __construct(Request $request = null)
    {
        if (is_null($request)) {
            $request = Request::instance();
        }
        $this->view    = View::instance(Config::get('template'), Config::get('view_replace_str'));
        $this->request = $request;

        // 控制器初始化
        $this->_initialize();

        // 前置操作方法
        if ($this->beforeActionList) {
            foreach ($this->beforeActionList as $method => $options) {
                is_numeric($method) ?
                $this->beforeAction($options) :
                $this->beforeAction($method, $options);
            }
        }
    }

控制器中然后快速获取各类参数值:

        //获取所有get值
        $this->request->get();
        //获取指定name名称的get值
        $this->request->get('name');

        //获取所有post值
        $this->request->post();
        //获取指定name名称的post值
        $this->request->post('name');
        //获取所有参数值(get post都可以)

        $this->request->param();
        //获取指定name名称的参数值(get post都可以)
        $this->request->param('name');

类方法:

获取当前系统参数

      // 获取当前域名
      echo '获取当前域名:'.$request->domain() . '<br/>';

      // 获取当前入口文件
      echo '获取当前入口文件:'.$request->baseFile() . '<br/>';

      // 获取当前URL地址,不含域名
      echo '获取当前URL地址,不含域名:'.$request->url() . '<br/>';

      // 获取包含域名的完整url地址
      echo '获取包含域名的完整url地址:'.$request->url(true) . '<br/>';

      // 获取URL地址 不含QUERY_STRING
      echo '获取URL地址 不含QUERY_STRING:'.$request->baseurl() . '<br/>';

      // 获取URL访问的ROOT地址
      echo '获取URL访问的ROOT地址:'.$request->root() . '<br/>';

      // 获取URL访问的ROOT地址
      echo '获取URL访问的ROOT地址 :'.$request->root(true) . '<br/>';

      // 获取URL地址中的 PATH_INFO 信息
      echo '获取URL地址中的 PATH_INFO 信息:'.$request->pathinfo() . '<br/>';

      // 获取URL地址中的 PATH_INFO 信息,不含后缀
      echo '获取URL地址中的 PATH_INFO 信息,不含后缀:'.$request->path() . '<br/>';

      // 获取URL地址中的后缀信息
      echo '获取URL地址中的后缀信息:'.$request->ext() . '<br/>';

获取请求的参数

      echo '请求方法:'.$request->method() . '<br/>';

      echo '资源类型:'.$request->type() . '<br/>';

      echo '访问ip:'.$request->ip() . '<br/>';

      echo '是否为ajax请求:'.var_export($request->isAjax(), true) . '<br/>';

      echo '请求参数:';
      dump($request->param());

      echo '请求参数:仅包含name';
      dump($request->only(['name']));

      echo '请求参数:排除name';
      dump($request->except(['name']));

获取get,post参数

        echo 'GET参数:';
        dump($request->get());

        echo 'GET参数:name';
        dump($request->get('name'));

        echo 'POST参数:name';
        dump($request->post('name'));

        echo 'cookie参数:name';
        dump($request->cookie('name'));

        echo '上传文件信息:image';
        dump($request->file('image'));

        echo '获取参数name,无论get还是post';
        echo $request->param('name');

获取当前的控制器,方法

      echo '模块:'.$request->module();

      echo '<br/>控制器:'.$request->controller();

      echo '<br/>操作:'.$request->action();

获取路由和调度信息

      echo '路由信息:';
      dump($request->routeInfo());

      echo '调度信息:';
      dump($request->dispatch());

0x02 常见获取request对象方法

助手函数request()

use think\Request ; Request是单例模式  通过Request::instance() ;获取对象

方法传参 request对象 ---public function index(Request $request){}【推荐】

0x03 输入变量

检测变量是否设置

可以使用has方法来检测一个变量参数是否设置,如下:

Request::instance()->has('id','get');
Request::instance()->has('name','post');

或者使用助手函数

input('?get.id');
input('?post.name');

变量检测可以支持所有支持的系统变量。

判断请求类型:

        $this->request->isGet();
        $this->request->isPost();
        $this->request->isAjax();

变量过滤

框架默认没有设置任何过滤规则,你可以是配置文件中设置全局的过滤规则:

// 默认全局过滤方法 用逗号分隔多个
'default_filter'         => 'htmlspecialchars',

也支持使用Request对象进行全局变量的获取过滤,过滤方式包括函数、方法过滤,以及PHP内置的Types of filters,我们可以设置全局变量过滤方法,例如:

Request::instance()->filter('htmlspecialchars');

支持设置多个过滤方法,例如:

Request::instance()->filter(['strip_tags','htmlspecialchars']),

也可以在获取变量的时候添加过滤方法,例如:

Request::instance()->get('name','','htmlspecialchars'); // 获取get变量 并用htmlspecialchars函数过滤
Request::instance()->param('username','','strip_tags'); // 获取param变量 并用strip_tags函数过滤
Request::instance()->post('name','','org\Filter::safeHtml'); // 获取post变量 并用org\Filter类的safeHtml方法过滤

获取部分变量

如果你只需要获取当前请求的部分参数,可以使用:

// 只获取当前请求的id和name变量
Request::instance()->only('id,name');

或者使用数组方式

// 只获取当前请求的id和name变量
Request::instance()->only(['id','name']);

默认获取的是当前请求参数,如果需要获取其它类型的参数,可以使用第二个参数,例如:

// 只获取GET请求的id和name变量
Request::instance()->only(['id','name'],'get');
// 只获取POST请求的id和name变量
Request::instance()->only(['id','name'],'post');

变量修饰符

input('变量类型.变量名/修饰符');

或者

Request::instance()->变量类型('变量名/修饰符');

例如:

input('get.id/d');
input('post.name/s');
input('post.ids/a');
Request::instance()->get('id/d');

ThinkPHP5.0版本默认的变量修饰符是/s,如果需要传入字符串之外的变量可以使用下面的修饰符,包括:

修饰符 作用
s 强制转换为字符串类型
d 强制转换为整型类型
b 强制转换为布尔类型
a 强制转换为数组类型
f 强制转换为浮点类型

HTTP头信息

可以使用Request对象的header方法获取当前请求的HTTP 请求头信息,例如:

$info = Request::instance()->header();
echo $info['accept'];
echo $info['accept-encoding'];
echo $info['user-agent'];

也可以直接获取某个请求头信息,例如:

$agent = Request::instance()->header('user-agent');

HTTP请求头信息的名称不区分大小写,并且_会自动转换为-,所以下面的写法都是等效的:

$agent = Request::instance()->header('user-agent');
$agent = Request::instance()->header('User-Agent');
$agent = Request::instance()->header('USER_AGENT');

URL伪静态

URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置url_html_suffix参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置

'url_html_suffix' => 'shtml'

我们可以把下面的URL http://serverName/Home/Blog/read/id/1 变成 http://serverName/Home/Blog/read/id/1.shtml

后者更具有静态页面的URL特征,但是具有和前面的URL相同的执行效果,并且不会影响原来参数的使用。

默认情况下,伪静态的设置为html,如果我们设置伪静态后缀为空字符串,

'url_html_suffix'=>''

则支持所有的静态后缀访问,如果要获取当前的伪静态后缀,可以使用Request对象的ext方法。

例如:

http://serverName/index/blog/3.html
http://serverName/index/blog/3.shtml
http://serverName/index/blog/3.xml
http://serverName/index/blog/3.pdf

更多参考tp5完全开发手册

thinkphp5框架之请求的更多相关文章

  1. Thinkphp5.0 的请求方式

    Thinkphp5.0 的请求方式 方法一(使用框架提供的助手函数): public function index(){ $request = request(); dump($request); } ...

  2. 【iOS】7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  3. PHP/ThinkPHP5 框架集成微博登录入库流程示意

    PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...

  4. 22.ThinkPHP5框架缺陷导致远程命令执行

    前言: 昨天爆出了ThinkPHP5框架缺陷导致远程命令执行,大佬们都赶上潮流挖洞,小白还是默默学习一下这个漏洞 漏洞影响范围: Thinkphp 5.1.0 - 5.1.31 Thinkphp 5. ...

  5. Beego框架POST请求接收JSON数据

    原文: https://blog.csdn.net/Aaron_80726/article/details/83870563 ------------------------------------- ...

  6. thinkphp5框架笔记(ing)

    重新整理下学习tp5手册的笔记.自己再好好看一次tp5的开发手册,学到哪里记到哪里. 0x01 安装 Composer安装 ThinkPHP5支持使用Composer安装 curl -sS https ...

  7. Android Http请求框架二:xUtils 框架网络请求

    一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址  : https://github.com/w ...

  8. iOS网络编程-ASIHTTPRequest框架同步请求-备用

    在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRe ...

  9. Vue框架axios请求(类似于ajax请求)

    Vue框架axios get请求(类似于ajax请求) 首先介绍下,这个axios请求最明显的地方,通过这个请求进行提交的时候页面不会刷新 <!DOCTYPE html> <html ...

随机推荐

  1. Java web 修改默认web部署路径

    转载自:https://blog.csdn.net/lcczpp/article/details/79968070 在eclipse上面部署web项目后,它没有将你的项目文件放到tomcat 的目录下 ...

  2. Winform中设置ZedGraph曲线图的字体样式是避免出现边框

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  3. 单点登录(Single Sign On)解决方案

    单点登录(Single Sign On)解决方案 需求 多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. A 网站和 B 网站是同一家公司的关联服务.现在要求,用户只要在其中一个网 ...

  4. Tempter of the Bone(DFS+剪枝)

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

  5. charles 禁用缓存

    本文参考:charles 禁用缓存 No caching Settings/无缓存工具的用法 弹窗面板上一句话概括了他的工作原理:通过修改请求和响应头来防止缓存; 无缓存工具 无缓存工具阻止客户端应用 ...

  6. jmeter性能分析

    1.硬件要求:包括客户端和服务端的cpu,mem,network,disk等,这些硬件设备必须满足性能测试的前提下,才能进行性能测试,否则得到的各项指标不一定是正确的 2.场景分析: 测试前的准备工作 ...

  7. 第二次作业:使用Packet Tracer分析应用层协议(DNS、FTP、DHCP、SMTP、POP3)

    0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 熟练使用Packet Tracer工具.分析抓到的应用层协议数据包,深入理解应用层协议,包括语法.语义.时序. 2 实验内容 ...

  8. C#加载前生成静态网页

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...

  9. Day 5文件管理—三剑客的了解

    文件的下载 wget curl 1.文件的上传 rz sz #不支持拷贝文件夹 文件内容进行 排序 sort ,去重uniq, 统计 文件的截取 cut awk sed .... | ######3. ...

  10. Mysql高手系列 - 第12篇:子查询详解

    这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语 ...