云客Drupal源码分析之请求对象Request及请求堆栈

2024-06-09 08:32

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

drupal是建立在Symfony组件之上,Symfony认为网站系统无非就是一个将请求转化为响应的系统,并以此设计执行流程,drupal也是如此,所以整个系统运行之初就是建立请求对象,这个对象将贯穿整个程序,被各个模块访问。

建立请求对象也是为适应面向对象开发方式,这个对象将把以前面向过程式程序设计经常使用的系统输入、环境变量、cookies、session等等数据封装起来,后续程序仅仅面对该对象即可,非常简洁,如无必要,不应该直接去操作$_POST、$_GET、$_COOKIE等等全局内容。为了方便使用请求对象也加入了一些额外的功能,比如可以添加自定义属性,这样模块间可以很方便的共享一些数据,它就像一艘船,顺流而下,可以带上你给的数据被沿途的处理节点看到。

一个根据外部输入产生的请求对象,系统根据它产生响应对象,响应可能包含很多块内容,为了产生每一块内容,在内部可以建立很多子请求对象,相对的由外部输入产生的请求对象称为主请求对象,主请求和子请求被放入请求堆栈中管理。

drupal不经修改的完全使用了Symfony的请求组件,请求对象的类定义位于:\vendor\symfony\http-foundation\Request.php

下面来看看这个请求对象:

产生主请求:

$request = Request::createFromGlobals();

这将把$_GET, $_POST,  $_COOKIE, $_FILES, $_SERVER数据全部封装到请求对象$request中,Request类允许自定义一个工厂去产生Request对象,工厂产生的对象必须是Request的实例。工厂是一个回调,先需要设置到Request中,如下:

Request::setFactory($callable);
$request = Request::createFromGlobals();

这允许你对基本的请求对象进行扩展,对产生的请求对象添加一些额外数据等等。

在工厂里可以实例化一个继承了Request类的类,极大的增加了灵活性。

在Reques中还提供了静态方法:Reques::create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null)用以根据自定义的uri产生一个子请求。

Reques提供了操作session的能力,注入一个实现了Symfony\Component\HttpFoundation\Session\SessionInterface接口的session对象即可:

 

<pre name="code" class="php">$request->setSession(SessionInterface $session);

 

 

 

 

 

对$_GET, $_POST,  $_COOKIE内容的访问全部通过参数包对象进行访问

\vendor\symfony\http-foundation\ParameterBag.php

上传的文件通过FileBag对象访问,服务器环境数据通过ServerBag对象访问,获得的http头数据通过HeaderBag对象访问

一系列的get方法可以得到常用的一些数据

请求堆栈:

在系统运行中通过请求堆栈对象访问请求对象,请求堆栈对象定义了一个关于请求对象的堆栈数据结构(先进后出),在内部它是通过php数组实现,保存了各个请求对象,最底层是主请求。

请求堆栈对象很简单,请看类定义\vendor\symfony\http-foundation\RequestStack.php

 

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

time:20160914 

 


 

这篇关于云客Drupal源码分析之请求对象Request及请求堆栈的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

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

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

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++