php一次请求完成的过程,QEEPHP一次完整请求的过程(转)
首先,看如下代码:
$app_config = require(dirname(__FILE__) . '/_code/config/boot.php');
require $app_config['QEEPHP_DIR'] . '/library/q.php';
require $app_config['APP_DIR'] . '/myapp.php';
解析:
通过调用boot.php文件将此网站基本的配置信息保存在变量$app_config
其中比较重要的配置信息有:框架根目录的指定、运行模式的选择、各个配置程序的目录设定、定义缓存配置文件要使用的缓存服务及策略
包含核心文件q.php ,核心文件主要内容我总结为以下几类:
调用类库及其文件的load方法。
读取和设置配置信息的方法。
注册对象及其判断是否注册过对象的方法。
缓存读写方法。
自动includ设置、渲染控件方法、处理数组的方法。
自定义的常用4个函数
Q::registerAutoload()这个函数将注册自动类的载入方法。
包含应用程序的基本启动流程和初始化操作的myapp类库注:在以上的步骤中仅仅保存了一个配置变量、注册了一个自动类载入的方法和包含了所需要的核心类库文件Q和启动文件 myapp
接下来进入正题开始初始化流程:
先上代码:
$ret = MyApp::instance($app_config)->dispatching();
if (is_string($ret)) echo $ret;
return $ret;
虽然这里的代码很简单,但它完成了一次完整的响应过程。
分开来详细说明:
MyApp::instance($app_config)
解析:这是一个初始化MyApp类的一个操作;
打开此文件首先查看instance方法;它仅仅是做了一个 new MyApp的一个操作-->
继续追踪构造函数,以下操作被执行:
是否记录执行脚本开始时间(一般开发模式需要查看页面载入时间)
禁止 magic quotes、处理转义的全局变量
自定义异常处理
开始载入配置信息;由于配置信息室需要缓存的,所以这里会判断配置信息的缓存是否存在或者是否失效,如果有缓存则直接调用缓存文件,并用Q::replaceini($config)注册整个系统所需要的配置信息。
这里要注意,由于系统生成项目的配置信息不是所有的,你可以根据项目根目录下 qeephp/library/_config/default_config.php文件查看qeephp所有的配置项,根据自己的需要增加你所需要的配置信息即可;
如果需要增加额外的配置文件,如需要SEO.YAML专门存储所需要的title、content、keyword,则需要在方法_initConfig()方法下增加调用的配置文件,如在files数组中增加一项SEO的信息。
设置SESSION、默认时区设置、导入类搜索路径、将myApp的注册对象添加到QEEPHP的核心注册表中。这样基本上完成了MyApp::instance($app_config)的初始化过程;接下来就是要处理所需要的请求了。这里拿HELLOWORD的例子做说明。
上代码:
$ret = MyApp::instance($app_config)->dispatching();
执行MyApp的方法dispatching()
解析:
构造运行时上下文对象
如果使用的不是standard,则需要在此进行路由的初始化设置;
获取当前请求URL的$_GET参数,经过过滤和规则化赋给context的4个基本属性值controller、action、namespace、module。
将当前请求中包含的控制器、动作、名字空间和模块名提取出来,构造为一个 UDI
使用authorizedUDI方法检查获取到的角色信息是否允许访问当前的UDI(即当前请求的URL),如果不允许访问则返回_on_access_denied方法输出304错误。
组合当前UDI所需要的控制器名称、路径、类名,如果不存在则在此返回404错误信息;
如果该控制器存在,且当前action(动作)已经定义,则实例化此控制器。
实例化此控制器将触发生成的abstract.php和qeephp/library/web/controller_abstract.php的构造函数过程
abstract.php将保存MyApp对象到$this->_app属性里
controller_abstract.php将context的对象保存在$this->_context属性里
利用existsAction方法检查当前动作是否存在,如果不存在首先调用abstract.php中定义的_on_action_not_defined的404错误,如果未定义则调用MyApp文件的_on_action_not_defined的404错误;如果存在则call_user_func_array(array($this, $action_method),$args)执行当前动作的代码,然后实例化模板引擎QView_Render_PHP;
对于模板引擎对象,首先导入基本的URL、当前UDI为变量,然后将控制器中的$this->_view数组变量传进模板引擎对象中的_vars属性里。
判断返回的$response的值,如果在控制器中使用$this->redirect()或者$this->_redirect()则更改所需要跳转的URL重新执行MyApp的dispatching()方法。如果没有跳转结尾,则执行模板引擎对象中的execute方法。
模板引擎中execute–渲染视图并返回渲染结果。
$output = $this->_parser->assign($vars)->parse($filename);由于此过程还没太多时间研究,对view层里使用block、element、control等的渲染基本上都在这几个方法中实现,等有时间了再补充进来。这样,基本上一次请求的所有处理过程就结束了,而dispatching()的返回值就是最后的html代码,输出$ret即结束了。
php一次请求完成的过程,QEEPHP一次完整请求的过程(转)相关推荐
- http请求过程 Android,android HTTP网络请求回顾
1.HTTP协议了解 http是一种应用层的协议,底层通过TCP来进行可靠的数据传输.HTTP是基于TCP的应用层协议,它在更高的层次封装了TCP的使用细节,使网络请求更加易用,TCP连接是因特网基于 ...
- linux http用户,HTTP完整请求过程
一.引言 前端不仅要让用户对网页有完美的体验,让用户尽快体验到完美的网页也是很重要的,这就要前端攻城狮掌握一些网络原理相关的知识了.这里就来聊一聊从用户输入 url 到页面加载完成的过程中都发生了什么 ...
- 客户端浏览器一次http完整请求过程流程图(图文结合诠释请求过程)
先上一张图给大家看看 http请求流程图 相信看完这张图后大家对一次请求也有了大致的了解了,当前其中还有很多细节小编没有画出来,然后我们来看看部分过程的细节 所以其流程大致如下: ①:DNS解析域名得 ...
- Web页面完整请求及渲染过程
前端技术人员离不开计算机网络通信知识的了解,基础的网络架构模型与TCP.HTTP等相关知识掌握之后,不免会考虑:我们在互联网使用过程中,输入一个网址后,获取网址对应的Web页面信息并成功渲染到浏览器窗 ...
- Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用
点击上方"Python共享之家",进行关注 回复"资源"即可获赠Python学习资料 今 日 鸡 汤 海内存知己,天涯若比邻. 大家好,我是皮皮. 一.前言 前 ...
- KVM虚拟机IO处理过程(一) ----Guest VM I/O 处理过程
虚拟化技术主要包含三部分内容:CPU虚拟化,内存虚拟化,设备虚拟化.本系列文章主要描述磁盘设备的虚拟化过程,包含了一个读操作的I/O请求如何从Guest Vm到其最终被处理的整个过程.本系列文章中引用 ...
- 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数
1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...
- java swing http请求_JavaWeb核心编程之(三.5)HTTP请求和接受表单数据
HTTP简介 WEB浏览器与WEB拂去其之间的一问一答的交互过程, 必须遵循一定的规则,这个规则就是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简 ...
- corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求
vue项目CORS跨域请求500,post请求变options请求,到底是什么情况. 提示:以下内容是一个非专业开发的我对跨域的理解,并不10分准确. 一.先介绍为什么明明发送的是Post请求,为什么 ...
最新文章
- elasticsearch 路由文档到分片
- Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
- 数据结构--单链表single linked list数据结构C++实现
- OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群
- 多媒体技术开发迎来新常态
- ubuntu 启动时显示initramfs 无法进入系统
- 华硕门店点亮系统_6大关键赋能,点亮导购服务力!
- 前端响应式布局与Bootstrap栅格系统快速了解与应用
- 以5‰的概率计算一个网络准确率达到99.9%的时间和迭代次数---实例三分类mnist 3,4,5
- UVA 10041-Vito's Family
- python selenium设置chrome浏览器保持登录方式
- docker实战——在测试中使用Docker
- 自己写的基金投资分析系统,这只基你们觉得怎么样?
- matlab画图时特殊符号的输入
- Qpid 安装问题之qpid.messaging
- 计算机从应用上看向那个方向发展,(总)2019年6月一级Ms Office试题
- 图像识别与处理——图像的表示与通道数问题
- 旧金山大学数据结构和算法的可视化工具
- 2辊张力辊张力计算公式
- 光伏最大功率点跟踪(MPPT)Simulink