thinkphp5框架之请求
又看到请求这一部分,个人认为这部分是算重要的一部分 单独记一篇笔记。
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框架之请求的更多相关文章
- Thinkphp5.0 的请求方式
Thinkphp5.0 的请求方式 方法一(使用框架提供的助手函数): public function index(){ $request = request(); dump($request); } ...
- 【iOS】7.4 定位服务->2.1.1 定位 - 官方框架CoreLocation: 请求用户授权
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- PHP/ThinkPHP5 框架集成微博登录入库流程示意
PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...
- 22.ThinkPHP5框架缺陷导致远程命令执行
前言: 昨天爆出了ThinkPHP5框架缺陷导致远程命令执行,大佬们都赶上潮流挖洞,小白还是默默学习一下这个漏洞 漏洞影响范围: Thinkphp 5.1.0 - 5.1.31 Thinkphp 5. ...
- Beego框架POST请求接收JSON数据
原文: https://blog.csdn.net/Aaron_80726/article/details/83870563 ------------------------------------- ...
- thinkphp5框架笔记(ing)
重新整理下学习tp5手册的笔记.自己再好好看一次tp5的开发手册,学到哪里记到哪里. 0x01 安装 Composer安装 ThinkPHP5支持使用Composer安装 curl -sS https ...
- Android Http请求框架二:xUtils 框架网络请求
一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址 : https://github.com/w ...
- iOS网络编程-ASIHTTPRequest框架同步请求-备用
在ASIHTTPRequest框架中与HTTP请求相关的类有:ASIHTTPRequest和ASIFormDataRequest,其中最常用的是ASIHTTPRequest,ASIFormDataRe ...
- Vue框架axios请求(类似于ajax请求)
Vue框架axios get请求(类似于ajax请求) 首先介绍下,这个axios请求最明显的地方,通过这个请求进行提交的时候页面不会刷新 <!DOCTYPE html> <html ...
随机推荐
- Android的消息循环与Handler机制理解
一.概念 1.事件驱动型 什么是事件驱动?就是有事了才去处理,没事就躺着不动.假如把用户点击按钮,滑动页面等这些都看作事件,事件产生后程序就执行相应的处理方法,就是属于事件驱动型. 2.消息循环 把需 ...
- 数据库占用CPU过高,性能分析与调优
一.使用 dstat -tcdlmnsygr --disk-util 查看当前系统资源使用状况,当前cpu使用率100% 二.使用TOP命令 查看当前占用CPU进程,可以看到当前占用CPU进程最高的是 ...
- 使用 Envoy 和 AdGuard Home 阻挡烦人的广告
原文链接:使用 Envoy 和 AdGuard Home 阻挡烦人的广告 通常我们使用网络时,宽带运营商会为我们分配一个 DNS 服务器.这个 DNS 通常是最快的,距离最近的服务器,但会有很多问题, ...
- RocksDB线程局部缓存
概述 在开发过程中,我们经常会遇到并发问题,解决并发问题通常的方法是加锁保护,比如常用的spinlock,mutex或者rwlock,当然也可以采用无锁编程,对实现要求就比较高了.对于任何一个共享变量 ...
- 基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
说明: .NET Core版本为:2.2 AdminLTE版本为:2.4.18 Bootstrap版本为:3.4.1 font-awesome版本为:4.7.0 1.新建项目:AdminLteDemo ...
- [VB.NET Tips]Try...Catch...End Try的另一种用法
有时在调用一个方法时,会进行异常处理.但是当方法内部出现错误时,无法快速定位到是哪一行代码有问题. 下面介绍一下Try的另一个用法: Try...Catch ex As Exception When ...
- 利用kubeadm快速部署 kubernetes 集群
结合一下两个教程 https://www.cnblogs.com/along21/p/10303495.html 链接:https://pan.baidu.com/s/1O_pcywfso4VFOsF ...
- airflow的安装
1.环境准备1.1 安装环境1.2 创建用户2.安装airflow2.1 安装python2.2 安装pip2.3 安装数据库2.4 安装airflow2.4.1 安装主模块2.4.2 安装数据库模块 ...
- 最新2019Pycharm破解教程,附激活码!
本教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! Pycharm安装 在这插一个小话题哈,Pycharm只是一个编译器,并不能代替Python,如果要使用Python,还是需要安装Pytho ...
- sublime_REPL使用及安装教程(解决Sublime无交互问题)
谈到python编程工具能想到那些? pycharm?IDLE? Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等,还可自定义键绑定,菜单和工具栏. ...
