《TP5.0学习笔记---请求和响应篇》

性能监控 TP 指标 一、TP 指标 在对系统进行性能测试或性能监控时候,TP 指标是一种比较常见的性能参数,包括 TP50、TP99、TP999 等等。 总次数∗指标数=对应指标在总次数中的序号 总次数 \ast 指标数 = 对应指标在总次数中的序号 总次数∗指标数=对应指标在总次数中的序号 通俗点说,假设为了测试某接口性能,对其调用100次,将每次的响应时间升序排序,假设响应时间排序结果为:1、2、3…99、100... 阅读详情

请求对象Request

我们知道Thinkphp是一个单入口的框架,所有的请求都进入index.php,我们通过index.php来接收所有的http请求,那么请求中所有的参数,我们都可以同过Request这个对象来接收和处理。

在thinkphp中我们又三种方法可以让我们获得Request对象

第一种方式:是框架提供的一个助手函数request()

第二种方式:是通过think下的Request类来获取它的实例

第三种方式:直接注入Request对象(看截图)

我们知道Thinkphp是一个单入口的框架,所有的请求都进入index.php,我们通过index.php来接收所有的http请求。那么我们现在打开这个index.php

在前边的学习我们知道,index.php只要定义一些常量以及引入框架的引导文件就可以了,这里引入了thinkphp/start.php,现在我们打开start.php

这里直接执行了App下的run()方法,它返回的是Response对象,它会执行Response下的send()方法,来返回给我们当前的http请求,在这里,它先引入了一个base.php,之前我们了解到base.php是定义的一些常量以及一些初始化。我们看见它把当前的文件命名为think(也就是当前的命名空间为think,也就是这里的namespace think),所以我们的App也是在think这个命名空间下。这个think指的是thinkphp/library/think

我们会看见有一个App.php,我们知道类名要和文件名相同

这个文件的命名空间也是think。

这个run()方法默认传递的就是一个request对象,默认值为null

看一下第一行,如果request为空,它就会执行Request类下的instance()方法来实例化一个request对象。Request是一个单例模式的类,也就是我们在整个应用中,只能实例化一次,在我们的App下的run()中就进行了实例化,那么我们在以后所有的方法中都可以使用。

从这整个过程我们知道,最先执行的就是App下的run()方法,我们的request对象在我们的run()方法中就已经实例化好了,我们可以在后面进行使用。

 

能在我们的request对象获取什么呢?

1,  获取浏览器输入框的值

比如说我们现在要获取我们的域名

如何获取后边的控制器名及方法名呢?

那就是pathinfo()方法

2,  通过request对象获取请求类型

快速判断是那种请求的函数,如:

$request->isGet();

$request->isPost();

$request->isAjax();

3,  如何获取请求参数

在thinkphp5.0开始,他所有的get不包含pathinfo中的传值

要想获取,可以使用$request->param()

获取post值就是$request->post()

获取session中的值$request->session()

我的浏览器中还没存过session值,这里我想设置一个

注意:我们如果想启用session,需要修改session的配置,在convention.php中找到,然后复制到应用配置文件config.php中

之后我再回到浏览器刷新,我设置的session就会出来,看图

还可以获取cookie,$request->cookie();

因为我们启用了session,它默认会有一个cookie

我们也可以自己添加cookie

这些我们获取的都是数组,如果我们想获取到数组下的某一个值,该如何获取呢?

比如这样

别的获取数组中的某一个也是这样,比如cookie  $request->cookie(‘email’);

4,获取模块  控制器   操作

在我们编写一些权限控制的时候,经常会用到权限控制器和操作,通过第三个选项共同来验证当前模块是否有权限,所以在我们的应用中,或者在我们的控制器中,我们也经常使用这些方式来进行获取

(1)      获取当前模块

$request->module();

(2)      获取当前控制器

$request->controller();

(3)      获取当前操作名

$request->action();

如果我们还想看request对象还为我们提供了哪些方法,我们可以打开thinkphp/library/think/Request.php

比如说我们看见里边还有url()方法,我们就可以试一下

助手函数input

在我们的程序开发过程中获取参数是十分重要的,所以thinkphp为我们提供了一个助手函数,叫input

我们可以通过input来获取我们传递的各种参数。我们知道thinkphp5.0框架的助手函数都在thinkphp/helper.php文件中,我们可以找到input函数

我们会看到它首先有一个判断,判断当前系统是否存在input 函数,如果存在,它就会跳过该部分,不再定义input函数。我们知道在php中,如果我们将一个函数重新定义,那么程序是会报错的,所以我们使用input函数是有一定风险的。我们在执行框架之前,也就是说我们在入口文件的地方,如果我们引入其他的文件,我们在其他文件中定义了input这个函数,那么系统将无法使用input这个函数来获取我们的各种参数,它还是使用我们自定义的那个input值。当然,在我们使用框架的时候,我们规范中是不允许重新定义的,或者说,我们团队中应该有这样的规范,不能定义和我们系统助手函数相同的函数名,如果定义的话,如果在之前引入,那系统中的函数将不能使用,如果在之后使用,那么程序会报错。

 

下面我们来看一下input函数的具体实现

Input函数有三个参数,第一个是$key,是我们要获取的变量名,第二个值为$default,如果我们要获取某一个变量,但是这个变量在系统中并不存在,它将直接返回我们的$default值。第三个参数为$filter,我们获取我们的变量值,那么我们是需要进行过滤的。如果你需要对变量的值进行过滤,那么你可以传递第三个参数来进行过滤,它接收的是一个函数名。然后接着看下边的代码

如果我们的$key值第一位是‘?’,也就是说,我们传入进来的$key值以“?”开头,那么他将直接把“?”去掉,并将$has值设置为true.(这里的strpos()函数作用是找到某个字符或字符串,第一次出现的位置)

接下来的那个if判断,如果$key值存在‘.’这个符号,那么它直接将用‘.’进行分割,将我们的$key分割成两个变量。后边的代码很好理解,自己看一下

 

我们在index/Index/index下打印一下$request->param()

会看见typy和id,type是通过pathinfo传递的,id是通过get传递的

需要说明一点,在我们使用param()这个方法中进行获取,它会返回我们post,get,以及我们pathinfo传递的所有值,也就是说,如果我们获取到了get值,它也会默认合并到我们的param中。

 

下面说一种情况,如果我们的get中存在id,post中也传入一个id,这个时候打印出param()的值,仅为两位,这个时候param中的id的值是post传递过来的值。所以这样给我们的程序在编写或者在后期的维护过程中,会出现很多问题,同样的取值,同样的方式,它取得的值却不是同一个地方的值。如果我们想解决这个问题,我们可以在前边加上取值的类型(例如:input(‘post.id’)),其实这对应的就是$resquest->get(‘id’);如果我们获取的是一个不存在的值,则会返回NULL,如果我们想给它一个默认值,我们就可以再给添加一个参数

作为默认值

现在如果我们想对sid进行过滤,比如说,需要传递sid为一个整形的时候,我们可能需要对他进行一个强制类型转化,此时我们可以传递第三个参数,叫’intval’,在php中就是转为整形的意思

Input()可以获取到哪些类型的额数据呢?

有:post,get,param,session,put,file,path等等,其实我们在刚才的助手函数中就可以看到它可以获取哪些类型的数据

如果传递的email不存在,我们依然可以添加第二个参数作为默认值input(‘session.email’,’3404767031@qq.com’);

响应对象Response

我们只带http请求是,每个请求会对应一个响应,我们的额服务器会对我们的请求作出相应的响应,我们可以在请求中获取所有的请求信息,那么我们该如何来控制我们的响应呢?thinkphp为我们提供了响应对象,我们这里不对响应对象做过详细的讲解,我们通过调整一些简单的参数,来让我们的response或者来让我们的程序返回不同的结果。比如说我们现在为App开发接口,那么我们可能需要的响应对象是一个Json或者是一个xml,如果现在我们是一个Ajax请求,那么我们肯能期望的响应是Json或xml以及html格式.如果我们现在做一个企业官网,那么我们可能只期望我们的响应对象是一个html就可以了。

现在看下边的代码,我在index/Index/index下定义一个数组

我们会在浏览器中得到一个html格式的结果,说明我们当前的响应为一个html响应。

其实在这个我们是不期望用echo 打印东西的,还有不用die()这些东西。因为我们的控制器最终会返回一个值,这个值需要在我们的response对象中进行处理,如果我们直接用die(),我们的程序是没有任何的问题,但是我们的响应就会发生一些问题。所以在我们的thinkphp5中,它不允许我们在程序中直接用die()。我们可以通过return的方式进行返回

 

我们来看一下是什么控制了我们的输出类型呢?

还是打开框架的convention.php,找到

然后你看我下边的代码

我们我们想将输出格式改成xml格式,就可以将json改成xml

 

那这些有什么用处呢?我们来举一个实际应用的例子

 

比如说我们现在需要给我们的api写接口,我们可能在我们的app目录下,直接新建一个模块叫api

我在里边写了一个Index.php文件

现在我们直接访问这个api/Index/getUser()方法,会报错。报错说我们的当前类型是array类型。我们期望返回的是一个html,html我们返回的应该是一个字符串,但我们当前返回的是数组,所以它无法解析会报错。我们可以通过改变它的类型,可以在conf下创建api/config.php这个配置文件,在前边讲过,在conf下创建与模块名相同的文件夹下为配置文件,仅对改模块起作用。同时我们也可以使用一个简单的方法进行配置,就是直接在改控制器下用Config::set()进行动态配置

在我们最终使用的时候一般不使用添加配置文件这种方式,因为在我们修改配置文件的时候,将Json修改成了xml时,那么所有的接口都会变成xml,那么我们已经发布的app可能就会存在问题。所以我们一般再给getUser()函数传递一个$type参数,让其默认值为Json,然后我们再在函数体中进行判断,最后我们使用动态的配置方式,具体看下边的截图

如果想得到xml格式的,我们可以在请求地址后加上‘?type=xml’

H3C交换机Console口连接全攻略:从接线到PuTTY配置(附常见问题排查) 本文详细介绍了H3C交换机Console口的连接与配置方法,包括硬件线缆选择、驱动安装、PuTTY参数设置及常见问题排查。特别针对Console转USB线缆的兼容性和驱动安装难点提供实用建议,帮助网络工程师快速掌握串联调试技巧,解决连接中的黑屏、乱码等典型问题。 阅读详情

相关推荐

电流镜结构实战:从零理解MOS管偏置电路设计(附吴金课程补充)

本文深入解析电流镜结构在MOS管偏置电路设计中的关键作用,从基本原理到实战应用全面覆盖。通过分析偏置电路的核心原理、破解设计难题的实用技巧,以及进阶优化策略,帮助工程师掌握这一模拟电路设计的核心技术。特别适合需要理解电流镜结构和基准电路设计的读者参考学习。

ujm5678901的博客 256

PHP支付,TP5.0接入支付宝支付流程(附教程)

TP5.0,接入支付宝支付,手把手教学,一学就会!

weixin_47127690的博客 4976

FPGA实战:从零构建eMMC控制器(Verilog篇)

本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。

weixin_26802933的博客 297

学习路之PHP--TP5.0使用-消息队列topthink/think-queue

listen、work只能运行一种,运行work,再运行listen,那么就会停止work监听任务并执行如:php think queue:listen --queue helloJobQueuephp think queue:work --daemon(不加--daemon为执行单个任务) 如:php think queue:work --queue helloJobQueue --daemon。......

Green 4873

Linux下OpenFire+Spark即时通讯环境搭建全攻略(含证书错误解决方案)

本文提供了一份详尽的Linux环境下OpenFire服务器与Spark客户端即时通讯系统的搭建与配置全攻略。内容涵盖从环境规划、服务端部署、数据库配置到客户端连接的全流程,并重点解决了Spark连接时常见的证书验证错误问题,为企业构建私有化、高可用的XMPP通讯平台提供了实战指导。

weixin_29251131的博客 165

【k8s面试】超详细kubernetes面试题总结,面试必问!(附200道K8s Docker面试真题+答案详解

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_83620959的博客 1465

PHP之 ThinkPHP5.0框架的使用

ThinkPHP5.0框架的使用

qq_29848853的博客 3720

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7833

tp6中request()->post()与Request::instance()->param有什么不同呢

request()->post()只能获取post类型的参数 Request::instance()->param能获取任何类型的参数。

qq_37805832的博客 1867

piamon实战-- 如何使用 Paimon 的 Java API 实现数据的点查

点查(Point Lookup)是指通过 ​​唯一键(Primary Key)​​ 快速定位并返回单条或少量数据的查询模式。例如:根据用户 ID 查询用户信息、根据订单号查询订单详情等。点查的核心诉求是 ​​低延迟​​ 和 ​​高吞吐​​,适用于实时风控、在线分析等场景。​​定义主键表结构​​,优化数据分布。​​构建过滤条件​​,使用指定查询键。​​执行查询并处理结果​​,结合流式更新实现实时查询。

阿华田的博客 531

MaxScript批量修改材质、贴图名称

MaxScript批量修改材质、贴图名称1 实现效果1.1 修改前材质、贴图名称1.2 修改后2 代码 1 实现效果 1.1 修改前材质、贴图名称 1.2 修改后 2 代码 prefixName = "prefiname" maxFile = "maxfilepath" makeDir "newBitmappath" mapsPath = newbitmappath + "\\" fn formatStr index = ( str = index as string newS

郑德帅 3241

PHP获取input中的值相同报错,《TP5.0学习笔记---请求和响应篇》

请求对象Request我们知道Thinkphp是一个单入口的框架,所有的请求都进入index.php,我们通过index.php来接收所有的http请求,那么请求中所有的参数,我们都可以同过Request这个对象来接收和处理。在thinkphp中我们又三种方法可以让我们获得Request对象第一种方式:是框架提供的一个助手函数request() 第二种方式:是通过think下的Request类来获...

weixin_36337548的博客 319

DeepSeek赋能公文写作:从高效成文到精准传情的全维度指南

摘要:AI赋能公文写作的精准化实践 公文写作长期面临框架混乱、素材匮乏、表达不规范、修改低效等痛点。DeepSeek等AI工具通过"精准指令+分步赋能"模式实现突破:首先明确公文的目的性、逻辑性和规范性特征;其次采用包含场景、类型、目的等要素的指令模板;再分四步实施:框架搭建确保层次分明,内容填充解决素材问题,表达优化适配不同语体,合规校验把关格式规范。典型案例显示,AI能将数据罗列转化为"数据+成果+价值"的生动表述,使公文既规范又具感染力。这种AI赋能的写作方法显

通俗易懂学IT 231

TP5.0 请求和响应

今天这篇文章主要写一下tp5.0的请求(request)和响应(response)。关于更多TP5.0的内容请参见[我的博客列表] ThinkPHP5 的架构设计和之前版本的主要区别之一就在于增加了 Request 请求对象和 Response 响应对 象的概念,了解了这两个对象的作用和用法对你的应用开发非常关键。 请求对象 Request 对象的作用是与客户端交互,收集客户端的For

li_jiaxiang的博客 2637

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

tp5.0笔记2:请求和响应

一、请求 tp5.0提供了Request对象来获取请求变量,调用Request对象分为三种方式1、传统方式<?php namespace app\index\controller; use think\Request; class Index { function index(){     $request = Request::instance();        echo ...

一路向前 517

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TP5的请求响应参数

1.请求 //导入系统请求类 use think\Request; class Index { public function index(Request $request) { // 以形参的方式在方法中使用 // 1、获取请求方式 $request->method(); // 2、获取访问ip $request...

思维小刀 1214

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

TP50、TP90、TP99、TP999

TP=Top Percentile,Top百分数,是一个统计学里的术语,与平均数、中位数都是一类。 TP50、TP90和TP99等指标常用于系统性能监控场景,指高于50%、90%、99%等百分线的情况。 首先给出Google到的答案: The tp90 is a minimum time under which 90% of requests have been served. ...

angie 9597

tp5和tp3.2的区别

万变不离其宗,tp5和tp3.2虽说是差别很大,但是套路大家都懂得。只要我们了解了他们的区别,再去学tp5,岂不是如鱼得水。 好,那我们来了解一下tp5和tp3.2的区别。 1,入口文件的绑定 我们都知道thinkphp是一个单入口框架,它所有的请求都通过public/index.php进入,如果我们正常情况下,我们默认访问的是index模块下的Index控制器下的index方法,如果我们现...

qq_41846563的博客 2万+

tp3.2 与tp5 tp与yii tp与laravel

//////////////////////////////// tp5和tp3.2的区别: 1. URL和路由的变化 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式: 主要改进如下; 增加路由变量规则; 增加组合变量支持; 增加资源路由; 增加路由分组; 增加闭包定义支持; 增加MISS路由定义; 支持URL路由规则反解析;...

西卡卡的博客 783

Tp3.2和Tp5.0区别

3.2和5.0区别 5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别。 URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式: 主要改进如下; 增加路由变量规则;增加组合变量支持;增加资源路由;增加路由分组;增加闭包定义支持;增加MISS路由定义;支持URL

Ethan8394的博客 2090

TP5请求对象Request

第一种方式, 助手函数 request() 第二种是, think\request 类来获取实例 use think\Request; class Index{ public function index(){ $request = Request::instance(); //单例模式 } } 第三种方法是, 注入对象, 建议使用这种方式. u...

codipy的博客 1246

vue axios跨域请求tp5项目

vue axios跨域请求tp5项目 困扰了一天的tp5 跨域请求终于搞定了,记录一下 在vue axios请求中会发送两次请求,提一次是监听当前请求是否能走通,网上很多教程文档都能实现,但是两次都请求到了数据,这样比较消耗服务器资源,所以我们需要监听请求方式,如果为OPTIONS 请求时只返回状态,不进入控制器处理数据,方法如下 一 创建文件夹 及文件 在application下面创建co...

weixin_44540711的博客 1158

html请求与响应原理,TP6实现原理分析系列(二):请求与响应

TP6实现原理分析系列(二):请求与响应2020-09-14 06:57:45 讲在前面的话:请求与响应是框架生命周期中两个重要的环节,是框架的收尾两端。请求负责接管客户端请求信息,并对外提供大量接口,获取更精细化数据。响应负责将业务逻辑执行后的结果以各种形式输出。本章节将从九个方面详细介绍请求与响应的实现细节,九小节分别是:请求信息、请求变量、请求类型、头信息、请求缓存、响应类型、响应输出、响应...

weixin_39887748的博客 527

thinkphp5.0学习(二):tp5.0架构和运转流程

tp5.0架构和运转流程

fight_tianer的博客 1236

tp3与tp5的区别 以及 tp5与laravel的区别

Tp3 和 Tp5之间的区别 Tp5版本和Tp3的差异较大的,它们的主要区别: 1.URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式: 主要改进有以下几点: 1.增加路由变量规则、 2.增加组合变量支持、 3.增加资源路由、 4.增加路由分组、 5.增加闭包定义支持、 6.增加MISS路由定义、 7.支持URL路由...

珞羽飘凌个人博客 2853
上一篇: <TP5之URL路由篇章>
下一篇: 《TP5.0学习笔记---视图和模板篇 》
勋彰
博客等级 码龄9年 36粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值