云客Drupal源码分析之响应对象Response及Cookie设置

2024-06-09 08:32

本文主要是介绍云客Drupal源码分析之响应对象Response及Cookie设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

要理解这一部分推荐先了解RFC2616文档,RFC文档就是互联网技术的魂,该文档定义了http协议,里面详细阐述了各类http头的使用,作为补充材料可以看一看上野宣所著的《图解HTTP》一书,于均良翻译,(题外话:日本人写的技术书籍大多比较踏实,印象深刻的是远山启写的《数学与生活》简述极限概念的时候比国内高等教育教科书好太多,希望国内多出好书,)

Drupal使用了symfony框架的http-foundation组件,里面定义了响应对象,文件路径为\vendor\symfony\http-foundation,默认有五个响应对象:

Response:通用响应对象,用于处理一般响应,也是用的最多的响应对象

以下四个用于特殊目的,他们都继承自Response:

BinaryFileResponse:文件响应

JsonResponse:json响应

RedirectResponse:重定向响应

StreamedResponse:流媒体响应

以上四个响应类对基本的Response进行了扩展或修正,这里主要讲述Response:

Response的作用是储存响应页面,及http响应头的管理(这里包括设置cookie),系统的功能就是将请求对象转换为响应对象,响应对象的形成意味着已经为浏览器准备好了响应,只需要调用$response->send();发送即可,在系统执行过程中会检测是否产生了该对象,比如调用控制器后,返回的如果是Response的实例则表示控制器直接产生了输出,否则将返回内容当做渲染数组去开启模板引擎

Symfony\Component\HttpFoundation\Response::create($content = '', $status = 200, $headers = array());可以直接创建一个响应对象,

$content为字符串内容或者具备__toString()方法的对象
$status为状态码
$headers为http响应头部,设置的HTTP头在调用send方法时才会被真正的发送

在Response内部响应页面是直接用一个属性存储的,HTTP响应头使用ResponseHeaderBag对象进行管理,cookie用Cookie对象管理并保存在ResponseHeaderBag的cookies属性数组里面,真正的发送动作在Response对象里面完成

设置一个cookie:

$response->headers->setCookie(new Cookie($name,$value, $expire, $path, $domain, $secure, $httpOnly));
其中$expire可以是表示时间的字符串、时间戳、DateTime对象

Response具备__toString()方法,因此你可以直接echo $response;看一看输出内容和HTTP头

响应对象对缓存头的控制:

$response->setCache(array $options);参数$options是一个缓存指令数组,键名为缓存指令(默认仅支持这些缓存指令:'etag', 'last_modified', 'max_age', 's_maxage', 'private', 'public'),键值为对应的值。

此外Response提供了大量的常用方法,请参看类定义

 

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

 

 

这篇关于云客Drupal源码分析之响应对象Response及Cookie设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044676

相关文章

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle