首先,看如下代码:

$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一次完整请求的过程(转)相关推荐

  1. http请求过程 Android,android HTTP网络请求回顾

    1.HTTP协议了解 http是一种应用层的协议,底层通过TCP来进行可靠的数据传输.HTTP是基于TCP的应用层协议,它在更高的层次封装了TCP的使用细节,使网络请求更加易用,TCP连接是因特网基于 ...

  2. linux http用户,HTTP完整请求过程

    一.引言 前端不仅要让用户对网页有完美的体验,让用户尽快体验到完美的网页也是很重要的,这就要前端攻城狮掌握一些网络原理相关的知识了.这里就来聊一聊从用户输入 url 到页面加载完成的过程中都发生了什么 ...

  3. 客户端浏览器一次http完整请求过程流程图(图文结合诠释请求过程)

    先上一张图给大家看看 http请求流程图 相信看完这张图后大家对一次请求也有了大致的了解了,当前其中还有很多细节小编没有画出来,然后我们来看看部分过程的细节 所以其流程大致如下: ①:DNS解析域名得 ...

  4. Web页面完整请求及渲染过程

    前端技术人员离不开计算机网络通信知识的了解,基础的网络架构模型与TCP.HTTP等相关知识掌握之后,不免会考虑:我们在互联网使用过程中,输入一个网址后,获取网址对应的Web页面信息并成功渲染到浏览器窗 ...

  5. Python网络爬虫过程中,构建网络请求的时候,参数`stream=True`的使用

    点击上方"Python共享之家",进行关注 回复"资源"即可获赠Python学习资料 今 日 鸡 汤 海内存知己,天涯若比邻. 大家好,我是皮皮. 一.前言 前 ...

  6. KVM虚拟机IO处理过程(一) ----Guest VM I/O 处理过程

    虚拟化技术主要包含三部分内容:CPU虚拟化,内存虚拟化,设备虚拟化.本系列文章主要描述磁盘设备的虚拟化过程,包含了一个读操作的I/O请求如何从Guest Vm到其最终被处理的整个过程.本系列文章中引用 ...

  7. 拦截器获取请求参数post_SpringBoot拦截器如何获取http请求参数

    1.1.获取http请求参数是一种刚需 我想有的小伙伴肯定有过获取http请求的需要,比如想 前置获取参数,统计请求数据 做服务的接口签名校验 敏感接口监控日志 敏感接口防重复提交 等等各式各样的场景 ...

  8. java swing http请求_JavaWeb核心编程之(三.5)HTTP请求和接受表单数据

    HTTP简介 WEB浏览器与WEB拂去其之间的一问一答的交互过程, 必须遵循一定的规则,这个规则就是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简 ...

  9. corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求

    vue项目CORS跨域请求500,post请求变options请求,到底是什么情况. 提示:以下内容是一个非专业开发的我对跨域的理解,并不10分准确. 一.先介绍为什么明明发送的是Post请求,为什么 ...

最新文章

  1. elasticsearch 路由文档到分片
  2. Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
  3. 数据结构--单链表single linked list数据结构C++实现
  4. OpenShift 4 之 GitOps(7)用ArgoCD部署Pacman应用集群
  5. 多媒体技术开发迎来新常态
  6. ubuntu 启动时显示initramfs 无法进入系统
  7. 华硕门店点亮系统_6大关键赋能,点亮导购服务力!
  8. 前端响应式布局与Bootstrap栅格系统快速了解与应用
  9. 以5‰的概率计算一个网络准确率达到99.9%的时间和迭代次数---实例三分类mnist 3,4,5
  10. UVA 10041-Vito's Family
  11. python selenium设置chrome浏览器保持登录方式
  12. docker实战——在测试中使用Docker
  13. 自己写的基金投资分析系统,这只基你们觉得怎么样?
  14. matlab画图时特殊符号的输入
  15. Qpid 安装问题之qpid.messaging
  16. 计算机从应用上看向那个方向发展,(总)2019年6月一级Ms Office试题
  17. 图像识别与处理——图像的表示与通道数问题
  18. 旧金山大学数据结构和算法的可视化工具
  19. 2辊张力辊张力计算公式
  20. 光伏最大功率点跟踪(MPPT)Simulink

热门文章

  1. 在eclipse里添加PHP项目
  2. ESP定律脱壳(吾爱复现)
  3. APP软件测试方法整理
  4. 【深入学习51单片机】二、一个极简RTOS源码分析
  5. 如何判断两个字符串是否相等
  6. 关于浏览器运行原理的初步认知
  7. 亿级高并发电商项目-- 实战篇 --万达商城项目 八(安装FastDFS、安装Nginx、文件服务模块、文件上传功能、商品功能与秒杀商品等功能)
  8. 优雅编程之这样简化表达式,你就“正常”了(二十三)
  9. 【D3.js实战】 品牌排名动态可视化
  10. 局域网arp攻击_arp欺骗与防御