框架运行流程介绍

这样的一个get请求http://hostname/index.php?route=common/home 发生了什么?

1. 开始执行入口文件index.php。

2. require_once(DIR_SYSTEM . 'startup.php');

做一些php的配置和加载一些类声明,包括系统主框架文件(system/engine下的文件)、一些必用到的helper和library。

系统主框架文件包括:

  registry:保存全局变量,使用了注册者模式,controller的基类、model的基类,loader等均保存此对象的引用。没有写成单例模式,可能是想让这个类更通用,可以额外new一个registry实例,在几个对象内做共享用;

  loader:动态加载其他文件用,提供加载model、library、helper、database、config和language能力,其中加载model和database会new出一个实例将其保存到registry对象内, 对于数据类,只需一个实例;

  controller,model:控制器的基类和数据模型类的基类,功能很简单;

  action:用户的一个请求,对应一个动作,用请求的query参数route初始化action;

  front:请求分发器,派发action;

下面的框架流程,会介绍这几个类具体都干了些什么。

3. 初始化 registry、loader、db、错误处理函数和一些后续用到的library,并将这些library实例的引用保存到registry对象内,进而供给controller和model对象直接使用。

4. 初始化 front,action对象,此时action由url中query参数route的值"common/home"构造,action解析出对应controller文件名,类名和要执行的方法及参数。 

5. front派发action,根据action的类名属性,new出controller对象ControllerCommonHome(catalog/controller/common/home.php),并用registry初始化,然后根据action的方法index(如果没传方法,默认为index)和参数属性(无),执行ControllerCommonHome->index(),index方法内,处理业务逻辑,加载模板等,最后将要输出到浏览器的内容保存到response内。注意controller的魔术方法 __get和__set,均从registry对象取值和赋值,所以可以像使用自己的属性一样,使用保存在registry的对象。例如:$this->load->model('catalog/category'), 调用loader对象的model方法。

6. index.php 内最后一行$response->output() 将内容输返回给用户。

至此框架处理完用户该请求。

另见 本人写的一个opencart插件 opencart 百度登录和百度钱包支付插件 响应式适应pc/mobile

OpenCart框架运行流程介绍的更多相关文章

  1. shiro原理及其运行流程介绍

    shiro原理及其运行流程介绍 认证执行流程 1.通过ini配置文件创建securityManager 2.调用subject.login方法主体提交认证,提交的token 3.securityMan ...

  2. Appium 自动化测试(3)--Appium框架与流程介绍

    Appium介绍 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的.可用于IOS和Android以及firefox的操作系统.原生的应用是指用andro ...

  3. egametang框架服务端运行流程

    et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...

  4. 浅析Scrapy框架运行的基本流程

    本篇博客将从Twisted的下载任务基本流程开始介绍,然后再一步步过渡到Scrapy框架的基本运行流程,其中还会需要我们自定义一个Low版的Scrapy框架.但内容不会涉及太多具体细节,而且需要注意的 ...

  5. Yii框架页面运行流程

    Yii框架页面运行流程 CComponent | CModel | CActiveRecord.CFormModel(所有模型的父类) | 表名.php(模型) | 入口文件------------- ...

  6. SSM三大框架的运行流程、原理、核心技术详解

    一.Spring部分1.Spring的运行流程第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("be ...

  7. 【转载】基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)——介绍、安装准备、安装、config文件以及运行脚本介绍

    基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)--介绍.安装准备.安装.config文件以及运行脚本介绍 其他 2018-0 ...

  8. Struts2框架的运行流程

    Struts2的运行流程 1.浏览器发送请求到控制器(如Struts2中的核心控制器StrutsPrepareAndExecuteFilter): 2.控制器调用Action的execute方法: 3 ...

  9. Struts2的运行流程以及关键拦截器介绍

    Struts2的运行流程 1.ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方 ...

随机推荐

  1. 如何去掉WinForm或者WPF的最大化和最小化按钮

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何去掉WinForm或者WPF的最大化和最小化按钮.

  2. 导出项目为jar包

  3. Android+OpenCV 摄像头实时识别模板图像并跟踪

    通过电脑摄像头识别事先指定的模板图像,实时跟踪模板图像的移动[用灰色矩形框标识] ps:一开始以为必须使用OpenCV Manager,可是这样会导致还需要用户去额外安装一个apk,造成用户体验很差, ...

  4. 阿里云ONS而微软Azure Service Bus体系结构和功能比较

    阿里云ONS而微软Azure Service bus体系结构和功能比较 版权所有所有,转载请注明出处http://blog.csdn.net/yangzhenping.谢谢! 阿里云的开放消息服务: ...

  5. Solr学习笔记-在Tomcat上部署执行Solr

    上一篇我们初识了Solr而且学习了Jetty的启动方式.查看了Solr的管理界面,这一篇我们来实如今Tomcat上部署执行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4. ...

  6. GOOGLE------Reilly_Open_Source_Award

    https://en.wikipedia.org/wiki/O%27Reilly_Open_Source_Award#2016

  7. 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  8. FastJSON应用前测试--转载

    FastJSON 应用前测试   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   ...

  9. Redhat YUM U盘源配置

    Redhat YUM U盘源配置 1)在U盘创建目录 #mkdir /yum/Server 并从光盘Server.Packages 目录的所有文件拷贝到/yum/Server 2)安装 creater ...

  10. js内置函数的使用

    arguments对象是一个参数对象,可以访问有操作和无操作的参数,能够获得每个参数的内容,参数的个数,例如:arguments[0];获第一个参数,arguments.length;获得参数的个数, ...