框架运行流程介绍

这样的一个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. java web 自定义错误页面 完整jsp错误页面代码(同时写错误日志) error.jsp

    1.首先配置web.xml  添加一下代码 <error-page> <error-code>500</error-code> <location>/e ...

  2. TDD中的迭代

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:TDD中的迭代.

  3. 从bug中学习怎么写代码

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:从bug中学习怎么写代码.

  4. 【转】C++中的虚函数的实现

    转自:http://blog.csdn.net/haoel/article/details/1948051 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(V ...

  5. 路冉的JavaScript学习笔记-2015年1月23日

    1.JavaScript的数据类型 A.原始类型:包含数值.字符串.布尔值.空值(null)和未定义值(undefined). Js原始类型均为不可改变类型.对不可变类型调用任何自带方法都不会改变原始 ...

  6. System Address Map Initialization in x86/x64 Architecture Part 2: PCI Express-Based Systems

      原文  http://resources.infosecinstitute.com/system-address-map-initialization-x86x64-architecture-pa ...

  7. Android开发之异步获取并下载网络资源-下载图片和下载文本内容

    在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图:              下载图片截图   ...

  8. C#中params使用

    1.参数被params修饰即为可变参数,params只能修饰一维数组. 2.给可变参数赋值的时候,可以直接传递数组的元素. 3.在调用的时候,会自动将这些元素封装为一个数组,并将数组传递. 4.可变参 ...

  9. 界面动态加载时报NullPointException

    今天在做环境监测的模拟软件时,登陆页面报NullPointException 一般像我们初始化Button时,是Button btn=(Button)findViewById(R.id.button1 ...

  10. sqlserver中的锁

    NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll ...