位置: 编程技术 - 正文

解读PHP的Yii框架中请求与响应的处理流程(php框架ci)

编辑:rootadmin

推荐整理分享解读PHP的Yii框架中请求与响应的处理流程(php框架ci),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php框架是干什么的,php框架介绍,php yii框架,php主流框架优缺点,php框架介绍,php框架介绍,php框架介绍,php框架介绍,内容如对您有帮助,希望把文章链接给更多的朋友!

一、请求(Requests)请求:一个应用的请求是用 yiiwebRequest 对象来表示的,该对象提供了诸如 请求参数(译者注:通常是GET参数或者POST参数)、HTTP头、cookies等信息。 默认情况下,对于一个给定的请求,你可以通过 request application component 应用组件(yiiwebRequest 类的实例) 获得访问相应的请求对象。在本章节,我们将介绍怎样在你的应用中使用这个组件。

1.请求参数

要获取请求参数,你可以调用 request 组件的 yiiwebRequest::get() 方法和 yiiwebRequest::post() 方法。 他们分别返回 $_GET 和$_POST 的值。例如,

信息:建议你像上面那样通过 request 组件来获取请求参数,而不是 直接访问 $_GET 和 $_POST。 这使你更容易编写测试用例,因为你可以伪造数据来创建一个模拟请求组件。当实现 RESTful APIs 接口的时候,你经常需要获取通过PUT, PATCH或者其他的 request methods 请求方法提交上来的参数。你可以通过调用 yiiwebRequest::getBodyParam() 方法来获取这些参数。例如,

信息:不同于 GET 参数,POST,PUT,PATCH 等等这些提交上来的参数是在请求体中被发送的。 当你通过上面介绍的方法访问这些参数的时候,request 组件会解析这些参数。 你可以通过配置 yiiwebRequest::parsers 属性来自定义怎样解析这些参数。

2.请求方法

你可以通过 Yii::$app->request->method 表达式来获取当前请求使用的HTTP方法。 这里还提供了一整套布尔属性用于检测当前请求是某种类型。 例如,

3.请求URLs

request 组件提供了许多方式来检测当前请求的URL。

假设被请求的URL是 你可以像下面描述的那样获取URL的各个部分:

yiiwebRequest::url:返回 /admin/index.php/product&#;id=, 此URL不包括host info部分。 yiiwebRequest::absoluteUrl:返回 包含host infode的整个URL。 yiiwebRequest::hostInfo:返回 只有host info部分。 yiiwebRequest::pathInfo:返回 /product, 这个是入口脚本之后,问号之前(查询字符串)的部分。 yiiwebRequest::queryString:返回 id=,问号之后的部分。 yiiwebRequest::baseUrl:返回 /admin, host info之后, 入口脚本之前的部分。 yiiwebRequest::scriptUrl:返回 /admin/index.php, 没有path info和查询字符串部分。 yiiwebRequest::serverName:返回 example.com, URL中的host name。 yiiwebRequest::serverPort:返回 , 这是web服务中使用的端口。

4.HTTP头

你可以通过 yiiwebRequest::headers 属性返回的 yiiwebHeaderCollection 获取HTTP头信息。 例如,

请求组件也提供了支持快速访问常用头的方法,包括:

yiiwebRequest::userAgent:返回 User-Agent 头。 yiiwebRequest::contentType:返回 Content-Type 头的值, Content-Type 是请求体中MIME类型数据。 yiiwebRequest::acceptableContentTypes:返回用户可接受的内容MIME类型。 返回的类型是按照他们的质量得分来排序的。得分最高的类型将被最先返回。 yiiwebRequest::acceptableLanguages:返回用户可接受的语言。 返回的语言是按照他们的偏好层次来排序的。第一个参数代表最优先的语言。

假如你的应用支持多语言,并且你想在终端用户最喜欢的语言中显示页面,那么你可以使用语言协商方法 yiiwebRequest::getPreferredLanguage()。 这个方法通过 yiiwebRequest::acceptableLanguages 在你的应用中所支持的语言列表里进行比较筛选,返回最适合的语言。

提示:你也可以使用 yiifiltersContentNegotiator 过滤器进行动态确定哪些内容类型和语言应该在响应中使用。 这个过滤器实现了上面介绍的内容协商的属性和方法。

5.客户端信息

你可以通过 yiiwebRequest::userHost 和 yiiwebRequest::userIP 分别获取host name和客户机的IP地址, 例如,

二、响应(Responses)响应:当应用完成处理一个请求后, 会生成一个yiiwebResponse响应对象并发送给终端用户 响应对象包含的信息有HTTP状态码,HTTP头和主体内容等, 网页应用开发的最终目的本质上就是根据不同的请求构建这些响应对象。

在大多是情况下主要处理继承自 yiiwebResponse 的 response 应用组件, 尽管如此,Yii也允许你创建你自己的响应对象并发送给终端用户,这方面后续会阐述。

在本节,将会描述如何构建响应和发送给终端用户。

1.状态码

构建响应时,最先应做的是标识请求是否成功处理的状态,可通过设置 yiiwebResponse::statusCode 属性,该属性使用一个有效的HTTP 状态码。例如,为标识处理已被处理成功, 可设置状态码为,如下所示:

尽管如此,大多数情况下不需要明确设置状态码,因为 yiiwebResponse::statusCode 状态码默认为, 如果需要指定请求失败,可抛出对应的HTTP异常,如下所示:

当错误处理器 捕获到一个异常,会从异常中提取状态码并赋值到响应, 对于上述的 yiiwebNotFoundHttpException 对应HTTP 状态码,以下为Yii预定义的HTTP异常:

yiiwebBadRequestHttpException: status code . yiiwebConflictHttpException: status code . yiiwebForbiddenHttpException: status code . yiiwebGoneHttpException: status code . yiiwebMethodNotAllowedHttpException: status code . yiiwebNotAcceptableHttpException: status code . yiiwebNotFoundHttpException: status code . yiiwebServerErrorHttpException: status code . yiiwebTooManyRequestsHttpException: status code . yiiwebUnauthorizedHttpException: status code . yiiwebUnsupportedMediaTypeHttpException: status code .

如果想抛出的异常不在如上列表中,可创建一个yiiwebHttpException异常,带上状态码抛出,如下:

2.HTTP 头部

可在 response 组件中操控yiiwebResponse::headers来发送HTTP头部信息,例如:

解读PHP的Yii框架中请求与响应的处理流程(php框架ci)

补充: 头名称是大小写敏感的,在yiiwebResponse::send()方法调用前新注册的头信息并不会发送给用户。

3.响应主体

大多是响应应有一个主体存放你想要显示给终端用户的内容。

如果已有格式化好的主体字符串,可赋值到响应的yiiwebResponse::content属性,例如:

如果在发送给终端用户之前需要格式化,应设置 yiiwebResponse::format 和 yiiwebResponse::data 属性,yiiwebResponse::format 属性指定yiiwebResponse::data中数据格式化后的样式,例如:

Yii支持以下可直接使用的格式,每个实现了yiiwebResponseFormatterInterface 类, 可自定义这些格式器或通过配置yiiwebResponse::formatters 属性来增加格式器。

yiiwebResponse::FORMAT_HTML: 通过 yiiwebHtmlResponseFormatter 来实现. yiiwebResponse::FORMAT_XML: 通过 yiiwebXmlResponseFormatter来实现. yiiwebResponse::FORMAT_JSON: 通过 yiiwebJsonResponseFormatter来实现. yiiwebResponse::FORMAT_JSONP: 通过 yiiwebJsonResponseFormatter来实现.

上述响应主体可明确地被设置,但是在大多数情况下是通过 操作 方法的返回值隐式地设置,常用场景如下所示:

上述的 index 操作返回 index 视图渲染结果,返回值会被 response 组件格式化后发送给终端用户。

因为响应格式默认为yiiwebResponse::FORMAT_HTML, 只需要在操作方法中返回一个字符串, 如果想使用其他响应格式,应在返回数据前先设置格式,例如:

如上所述,触雷使用默认的 response 应用组件,也可创建自己的响应对象并发送给终端用户,可在操作方法中返回该响应对象,如下所示:

注意: 如果创建你自己的响应对象,将不能在应用配置中设置 response 组件,尽管如此, 可使用 依赖注入 应用通用配置到你新的响应对象。

4.浏览器跳转

浏览器跳转依赖于发送一个Location HTTP 头,因为该功能通常被使用,Yii提供对它提供了特别的支持。

可调用yiiwebResponse::redirect() 方法将用户浏览器跳转到一个URL地址,该方法设置合适的 带指定URL的 Location 头并返回它自己为响应对象,在操作的方法中,可调用缩写版yiiwebController::redirect(),例如:

在如上代码中,操作的方法返回redirect() 方法的结果,如前所述,操作的方法返回的响应对象会被当总响应发送给终端用户。

除了操作方法外,可直接调用yiiwebResponse::redirect() 再调用 yiiwebResponse::send() 方法来确保没有其他内容追加到响应中。

补充: yiiwebResponse::redirect() 方法默认会设置响应状态码为,该状态码会告诉浏览器请求的资源 临时 放在另一个URI地址上,可传递一个状态码告知浏览器请求的资源已经 永久 重定向到新的URId地址。如果当前请求为AJAX 请求,发送一个 Location 头不会自动使浏览器跳转,为解决这个问题, yiiwebResponse::redirect() 方法设置一个值为要跳转的URL的X-Redirect 头, 在客户端可编写JavaScript 代码读取该头部值然后让浏览器跳转对应的URL。

补充: Yii 配备了一个yii.js JavaScript 文件提供常用JavaScript功能,包括基于X-Redirect头的浏览器跳转, 因此,如果你使用该JavaScript 文件(通过yiiwebYiiAsset 资源包注册),就不需要编写AJAX跳转的代码。

5.发送文件

和浏览器跳转类似,文件发送是另一个依赖指定HTTP头的功能,Yii提供方法集合来支持各种文件发送需求,它们对HTTP头都有内置的支持。

yiiwebResponse::sendFile(): 发送一个已存在的文件到客户端 yiiwebResponse::sendContentAsFile(): 发送一个文本字符串作为文件到客户端 yiiwebResponse::sendStreamAsFile(): 发送一个已存在的文件流作为文件到客户端

这些方法都将响应对象作为返回值,如果要发送的文件非常大,应考虑使用 yiiwebResponse::sendStreamAsFile() 因为它更节约内存,以下示例显示在控制器操作中如何发送文件:

如果不是在操作方法中调用文件发送方法,在后面还应调用 yiiwebResponse::send() 没有其他内容追加到响应中。

一些浏览器提供特殊的名为X-Sendfile的文件发送功能,原理为将请求跳转到服务器上的文件, Web应用可在服务器发送文件前结束,为使用该功能,可调用yiiwebResponse::xSendFile(), 如下简要列出一些常用Web服务器如何启用X-Sendfile 功能:

6.发送响应

在yiiwebResponse::send() 方法调用前响应中的内容不会发送给用户,该方法默认在yiibaseApplication::run() 结尾自动调用,尽管如此,可以明确调用该方法强制立即发送响应。

yiiwebResponse::send() 方法使用以下步骤来发送响应:

触发 yiiwebResponse::EVENT_BEFORE_SEND 事件. 调用 yiiwebResponse::prepare() 来格式化 yiiwebResponse::data 为 yiiwebResponse::content. 触发 yiiwebResponse::EVENT_AFTER_PREPARE 事件. 调用 yiiwebResponse::sendHeaders() 来发送注册的HTTP头 调用 yiiwebResponse::sendContent() 来发送响应主体内容 触发 yiiwebResponse::EVENT_AFTER_SEND 事件.

一旦yiiwebResponse::send() 方法被执行后,其他地方调用该方法会被忽略, 这意味着一旦响应发出后,就不能再追加其他内容。

如你所见yiiwebResponse::send() 触发了几个实用的事件,通过响应这些事件可调整或包装响应。

深入讲解PHP的Yii框架中的属性(Property) 在PHP中,类的成员变量也被称为属性(properties)。它们是类定义的一部分,用来表现一个实例的状态(也就是区分类的不同实例)。在具体实践中,常

详解在PHP的Yii框架中使用行为Behaviors的方法 一个绑定了行为的类,表现起来是这样的://Step1:定义一个将绑定行为的类classMyClassextendsyiibaseComponent{//空的}//Step2:定义一个行为类,他将绑定到MyClass上

PHP的Yii框架中行为的定义与绑定方法讲解 定义行为要定义行为,通过继承yiibaseBehavior或其子类来建立一个类。如:namespaceappcomponents;useyiibaseBehavior;classMyBehaviorextendsBehavior{public$prop1;private$_prop

标签: php框架ci

本文链接地址:https://www.jiuchutong.com/biancheng/292467.html 转载请保留说明!

上一篇:解析PHP的Yii框架中cookie和session功能的相关操作(php的框架有哪些)

下一篇:深入讲解PHP的Yii框架中的属性(Property)(php的介绍)

  • 小型微利企业所得税率
  • 个体工商户可以开发票吗
  • 小规模纳税人未达起征点增值税处理
  • 所得税税负率是125正常吗
  • 一般纳税人开普票税率是多少
  • 出口发票开错了如何处理
  • 免税农产品发票怎么做账
  • 员工提成比例怎么分配
  • 进项税大于销项税需要交附加税吗
  • 会计准则折旧年限规定最新
  • 公司不交工会经费的原因,风险说明
  • 小微企业税务服务站
  • 社保公司部分交多少比例
  • 以前年度损益调整借贷方向
  • 电子产品配件批发市场
  • 红字发票是否要修改往期申报表
  • 当月确认收入下年怎么算
  • 自产的产品无偿赠送职工
  • 小规模企业发票跨月可以作废吗?
  • 钉钉报销费用明细怎么写
  • 关于处置固定资产的请示
  • 公司租车费用会计分录
  • 什么情况增值税专用发票不能抵扣
  • 华为鸿蒙系统超级终端怎么用
  • 企业注销时往来账目挂账怎么处理
  • 公司买手机给员工怎么做账
  • win11安装失败无法开机
  • 所得税以前年度亏损
  • 已抵扣发票开了红字发票怎么做分录?
  • PHP:ftp_nb_put()的用法_FTP函数
  • 多台电脑如何建立局域网
  • wordpress邮箱怎么配置
  • 以物易物双方做什么处理
  • php://input用法
  • 行政单位预算外资金收入上缴财政专户的方式不包括
  • 数据持久化操作
  • hptlbxfx.exe
  • php官方微信接口有哪些
  • php抓取
  • 应收账款逾期的危险信号
  • 爱德华王子岛的气候
  • 公章的法律效力范围
  • 嵌入式从业10年,聊聊我对工业互联网和消费物联网的看法 | 文末赠书4本
  • php如何安装配置
  • 本期应补退税额和期末未缴税额
  • 《中华人民共和国治安管理处罚法》
  • 有净残值的固定资产累计折旧怎么算
  • 酒类许可证过期了去哪里换证
  • 配件及修理费
  • 其它应付款的审计内容
  • 厂房出租自用各种费用
  • 收到货款未开发票是否违法
  • 暂估商品会计分录
  • 营改增对企业税负影响
  • 公司里的废品的处理一般是谁负责
  • 怎么计算预缴及附加税额
  • 处置固定资产的增值税怎么处理
  • 会计核算方法包括
  • sql server数据库监控
  • linux系统中的文件
  • apache 443
  • linux安装syslog
  • winxp软件双击后没有反应
  • win 7系统无法删除系统文件
  • debian 单网卡设置双ip
  • 2016年首个国家安全教育日
  • linux init.h
  • win10提示空闲计时器已过期
  • windows8.1rt
  • JQuery.Ajax()的data参数类型实例详解
  • Android游戏开发实践指南
  • unity手机游戏开发教程
  • react native usestate
  • linuxyum安装php7
  • Vue-Access-Control 前端用户权限控制解决方案
  • android 数据
  • 税务总局电子申报软件39
  • 闽政通城乡居民养老保险认证
  • ca证书怎么删除
  • 地税局面试
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设