OpenCart框架运行流程介绍
框架运行流程介绍
这样的一个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框架运行流程介绍的更多相关文章
- shiro原理及其运行流程介绍
shiro原理及其运行流程介绍 认证执行流程 1.通过ini配置文件创建securityManager 2.调用subject.login方法主体提交认证,提交的token 3.securityMan ...
- Appium 自动化测试(3)--Appium框架与流程介绍
Appium介绍 Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的.可用于IOS和Android以及firefox的操作系统.原生的应用是指用andro ...
- egametang框架服务端运行流程
et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...
- 浅析Scrapy框架运行的基本流程
本篇博客将从Twisted的下载任务基本流程开始介绍,然后再一步步过渡到Scrapy框架的基本运行流程,其中还会需要我们自定义一个Low版的Scrapy框架.但内容不会涉及太多具体细节,而且需要注意的 ...
- Yii框架页面运行流程
Yii框架页面运行流程 CComponent | CModel | CActiveRecord.CFormModel(所有模型的父类) | 表名.php(模型) | 入口文件------------- ...
- SSM三大框架的运行流程、原理、核心技术详解
一.Spring部分1.Spring的运行流程第一步:加载配置文件ApplicationContext ac = new ClassPathXmlApplicationContext("be ...
- 【转载】基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)——介绍、安装准备、安装、config文件以及运行脚本介绍
基于RedHatEnterpriseLinux V7(RHEL7)下SPEC CPU 2006环境搭建以及测试流程(之一)--介绍.安装准备.安装.config文件以及运行脚本介绍 其他 2018-0 ...
- Struts2框架的运行流程
Struts2的运行流程 1.浏览器发送请求到控制器(如Struts2中的核心控制器StrutsPrepareAndExecuteFilter): 2.控制器调用Action的execute方法: 3 ...
- Struts2的运行流程以及关键拦截器介绍
Struts2的运行流程 1.ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方 ...
随机推荐
- 文件正在上传的转圈圈gif图片引出的fixed定位和absolute定位
文件正在上传的转圈圈gif图片 一.文件上传时,未上传返回成功状态之前给个gif动态图片显示在页面,改善用户体验. <!--S 遮罩层 --> <div id="mas ...
- android FakeWindow的小应用大用途
android FakeWindow的小应用大用途 在windowmanager里面有一个FakeWindow,细致一看也就是一个透明的应用覆盖到屏幕的最前端,这样有什么优点呢?首先我们还是从应用的需 ...
- eclipse设置快捷键sysout+Alt+/后出System.out.println!亲測可用!
曾经一直用myeclipse,没有这方面的顾虑,如今换到了eclipse,非常多要自己设置了,比方非常多快捷键. 最经常使用的,执行到sysout ,eclipse总是不自己主动补全,非常是恼火!!! ...
- Android音频底层调试-基于tinyalsa
因为Android中默认并没有使用标准alsa,而是使用的是tinyalsa.所以就算基于命令行的測试也要使用libtinyalsa.Android系统在上层Audio千变万化的时候,能够能这些个工具 ...
- strlen和sizeof的差别
一.sizeof sizeof(...)是运算符,而不是一个函数. 一个简单的样例: int a; cout<<sizeof a<<endl; 在头文件 ...
- NSMakeRange基础函数应用
NSRange NSMakeRange ( NSUInteger loc, NSUInteger len ); 这是官方得接口描述.loc 为location缩写,len 表示长度.作用:在loc指定 ...
- Java基础知识强化之集合框架笔记69:Collections类之ArrayList存储自自定义对象并排序的案例
1. ArrayList存储自自定义对象并排序的案例: ArrayList存储自自定义对象,并使用Collections对ArrayList存储基本包装类的元素排序. 2. 代码实现: (1)Stud ...
- C# Quartz.Net 定时任务的简单使用
最近做了一个定时执行任务的软件. 执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象. 我做的是每天的9点和16点执行一次任务,以此记录: 首先,获得Quartz.N ...
- YII中表单验证
关于表单的验证有三种: 1.yii的客户端验证 2.yii的服务器端验证 3.yii的ajax验证 例如: 1.在表单对应的模型中定义一个rules方法(该方添加后,在表单提交时,将自动被调用) pu ...
- VS2010数据库连接问题
我用SQL server 2008写了一个小表格,运行VS的前选择了 工具-连接数据库,然后选择了那个表格的名称.运行后出现如下错误提示,请问是哪里出了问题呢? 数据库连接版本有问题.在VS中把信用数 ...