《Symfony 5全面开发》教程05、http请求的query参数
首先我们删除上节课所下的断点,在Phpstorm底部我们打开debug选项卡。点击这个按钮展开所有的PHP断点,选中之后点击这个删除,然后我们关闭xdebug监听。
回到浏览器刷新页面,当我们的浏览器访问一个地址时,通常会发送一个GET请求,我们可以在浏览器的访问地址上,使用'?'加上'参数名'='参数值'的方式来添加请求参数。
当我们敲击回车访问时,浏览器会将这个地址和page参数一块发送到我们的服务器端,那么服务器端该如何获取到这个page参数呢?
对于HTTP请求在访问地址后面添加的参数通常叫做query参数。
回到项目,我们在action函数中可以添加参数。因为Symfony实现了PSR标准规范的容器接口,可以通过使用依赖注入的方式来解耦合代码。
我们可以在index方法中直接注(口误)入Request对象,这个Request我们要选择HttpFoundation这个命名空间下的类。Symfony为我们提供了dump方法,我们可以用dump方法来查看一下Request对象。我们在这里我们输入die方法,来暂停后面代码的执行。
再次刷新页面,Symfony将我们的请求和请求参数封装成了Request对象。我们来看一下我们的query属性,page参数就在query属性中。 另外还有request属性,files属性,cookies属性,headers等等属性。
request属性通常用于POST请求参数的获取,files通常用于文件的接收。
那么我们该如何获取到page的值呢?Request对象为我们封装了很多方法,获取query,然后get(),传入'page',我们再次查看一下$page。
现在我们已经获取到了page参数(口误)。这里加了两个引号,这是一个字符串类型。如果我们想获取到整数类型该怎么办呢?Request仍然给我们做了封装,我们使用getInt()。
再次刷新,这样就变成了一个整数类型。我们按着command键把鼠标移动到getInt方法中,能看到getInt有两个参数。第一个参数是query参数的键,第二个参数是默认值。如果我们的访问地址中没有设置这个键,它将返回一个默认值。
我们在后面输入default值为1,然后回到浏览器,我们去掉page参数,再次访问页面,我们看到默认值为1。
下面我们来发送一个POST请求,我们看Symfony如何处理POST请求中的参数。我们打开postman,我们新建一个请求,请求的方式,我们选择POST方式,地址输入127.0.0.1:8000/test路径。POST请求我们需要在Body中填入表单的值,这次我们输入name等于hello。
回到项目,我们再次使用dump方法来查看一下Request对象。发送请求,我们点击这个preview选项卡。在Request对象的request属性中,我们看到了name参数。我们可以用Request对象的request属性来获取到对应的参数。
再次发送请求,我们看到我们已经获取到了name参数。Symfony为我们提供了另外一个方法,还可以省略十七行十八行的代码,输入dd()方法来查看变量的值。
按着command点击dd(),dd()方法是对dump方法和exit方法的一个封装,删掉18行19行代码,再次发送请求,显示的效果是一样的。
继续修改代码,我们希望在/test路径后面添加一个name参数,当我们访问时,让页面显示我们的名字。这里我们修改一下,name这里我们要使用query属性,修改hello word为我们$name变量。
再次刷新页面,我们的名字已经显示了,这就是我们第一个最简单的Symfony页面。
现在我们来深入学习一下,我们看index方法中的Request对象是如何注入到方法中的。我们回到上一节课,在流程图中当Kernel对象接收到Request对象后,会首先找到那个controller方法,再根据controller方法和请求对象来解析它的所有参数。
现在我们来深入学习一下,回到项目,还记得上节课的handleRaw方法吗?我们来双击shift键,输入HttpKernel。如果你的编辑器没有找到这个文件的话,你要勾选这项。
现在我们找到handleRaw方法,在handleRaw方法中,我们下个断点跟踪这段代码。监听xdebug请求,刷新第一个页面。
这时断点就断在了handleRaw方法中,我们看现在的controller方法,它就是TestController的index方法。在这一步它会获取到index方法的所有参数,就是Request这个参数。
我们进入这段代码,我们点击进入,我们看50行51行代码,这是一个双重循环,Symfony会首先根据我们的controller方法获取到所有参数的Metadata,获取完之后进行一项遍历,因为controller方法的参数可以有很多种类型,Symfony也针对不同的参数类型提供了不同的解析器。
点击左边Controller文件夹,文件夹下有个ArgumentResolver文件夹。点击,下面提供了很多种的resolver解析器,我们当前controller(口误)方法的参数只有一个Request对象
它会使用RequestValueResolver对象来处理这个参数。
我们在56行下断点,点击左下角执行,它断到了56行,我们再看这个$resolver变量,$resolve变量它指向的就是RequestValueResolver类。它是这个类的一个实例,我们进入这个类查看一下代码如何执行。
找到RequestValueResolver类,我们看一下supports方法。我们参数的类型是Request类型,它就往下执行,在resolve方法中,直接返回了Symfony已经封装好的Request对象。所以我们就可以直接在action方法中使用这个Request对象。
在handleRaw第151行下断点,我们看一下最后的$arguments参数,直接点击运行。断点停在了151行,我们看$arguments变量,$arguments变量只有一个,它是我们的Request对象。所以我们可以直接在action方法中直接使用这个Request对象来获取所有的请求参数。
我们看第12行代码,这个写法是PHP8.0版本提供的注解的写法,第一个参数是路由指向的路径,第二个参数是路由的名称。
在下一节课,我们将深入的学习一下路径中的占位符如何使用。
本文转载于:https://www.teebb.com/content/debug-and-query-parameters
《Symfony 5全面开发》教程05、http请求的query参数的更多相关文章
- Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Android快乐贪吃蛇游戏实战项目开发教程-05虚拟方向键(四)四个三角形按钮
该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.如何判断点击的是哪个方向键按钮 在上篇教程中我们实现了左边的三角形按钮效果, ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Taurus.MVC WebAPI 入门开发教程3:路由类型和路由映射。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Taurus.MVC WebAPI 入门开发教程5:控制器安全校验属性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Taurus.MVC WebAPI 入门开发教程6:全局控制器DefaultController与全局事件。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
前言: Taurus.MVC 微服务版本已经发布了:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单. 以前都是框架发布时写点相关功能点的文章,没有形成 ...
随机推荐
- 容器docker网络解析
如果想要实现两台主机之间相连通信,最直接的办法是找一根网线连起来, 多台的话需要用网线将他们链接再交换机上. linux中能够起到虚拟交换机的网络设备是网桥birdge, 工作再链路层, 主要是根据m ...
- Python:使用pyinstaller打包含有gettext locales语言环境的项目
问题 如何使用 pyinstaller 打包使用了 gettext 本地化的项目,最终只生成一个 exe 文件 起因 最近在用 pyhton 做一个图片处理的小工具,顺便接触了一下 gettext,用 ...
- react直接使用bootstrap失效的原因
react用的是className!而不是class~
- gcc 11.2 在线升级
环境:centos 7 1.准备开发环境 $ yum groupinstall "Development Tools" $ yum install glibc-static lib ...
- ApacheCN 数据科学译文集 20211109 更新ApacheCN 数据科学译文集 20211109 更新
计算与推断思维 一.数据科学 二.因果和实验 三.Python 编程 四.数据类型 五.表格 六.可视化 七.函数和表格 八.随机性 九.经验分布 十.假设检验 十一.估计 十二.为什么均值重要 十三 ...
- 再见丑陋的 SwaggerUI,这款开源的API文档生成神器界面更炫酷,逼格更高!
一般在使用 Spring Boot 开发前后端分离项目的时候,都会用到 Swagger.Swagger 是一个规范和完整的框架,用于生成.描述.调试和可视化 RESTful 风格的 Web API 服 ...
- 监听器(Listener)详解及举例
概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器组成要素: 事件源:事 ...
- 【Android珍藏】推荐10个炫酷的开源库【转】
感谢大佬:https://www.jianshu.com/p/d608f0228fd4 前言 技术群里面经常有人问到一些炫酷的UI效果实现方法,有时候我都是给一个相同或者相似效果的Github链接,有 ...
- html路径
一.HTML 相对路径和绝对路径区别分析 HTML初学者会经常遇到这样一个问题,如何正确引用一个文件.比如,怎样在一个HTML网页中引用另外一个HTML网页作为超链接(hyperlink)?怎样在一个 ...
- 在zabbix中实现发送带有图片的邮件和微信告警
1 python实现在4.2版本zabbix发送带有图片的报警邮件 我们通常收到的报警,都是文字,是把动作中的消息内容当成了正文参数传给脚本,然后邮件或者微信进行接收,往往只能看到当前值,无法直观的获 ...