OpenCart: 架构概览

本文详细探讨了OpenCart电商平台的架构设计,包括其基于MVC范式的模型、视图、控制器分层结构,以及独特的Registry设计模式如何实现信息共享。文章还解释了魔术函数在控制器中的应用,以及整体流程从创建Registry对象到最终输出页面的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCart是一个代码设计精致小巧的电子商务系统。

1、MVC架构:

OpenCart是基于MVC范式的。

model层负责获取数据。和其他一些框架如CakePHP相比,model的功能实现有限但简洁,直接调用DB类实现数据CRUD操作。

(CakePHP的模型层支持基础数据验证,复杂业务逻辑由Controller层处理)。

controller层负责处理请求,从model获取数据,提交给view层模板。

view负责组织展示。


2、“Registry”设计模式

在OP中,Registry是整个系统的信息中枢。

Registry是一个单例(Singleton),在index.php起始页面中,

首先作为构造函数参数传递给所要用到的类创建类实例,并随之将这个类实例设置到这个“注册表”中,

这个注册表就像是一个共享的数据总线一样,把各个模块/数据串联在一起。


3、整体流程

(1)创建Registry对象

(2)注册所有公共类

(3)创建Front类对象,作为请求分发器(Dispatcher)

(4)根据用户请求(url)创建控制器对象及其动作。

在Front类私有函数execute($action)中如下语句

$controller = new $class($this->registry); //创建控制器

(5)控制器加载相应的模型,如

$this->load->model('design/layout');

该语句将创建相应的model对象。

(6)控制器获取模板,绘制(提取数据并启用output buffer)到页面输出区output中

$this->render();

(7)最后Response对象把输出区的数据(页面)echo返回给用户


4、魔术函数(Magic method)

在Controller中调用$this->load->...时,熟悉面向对象语言的开发人员会觉得有点奇怪,因为Controller基类中并没有$load成员变量。

实际上这是由PHP5魔术函数来实现的。__get(), __set()函数在获取/设置非类定义成员变量的时候,会由PHP自动调用。

那么OP中在执行$this->load->...时实际调用的是:

public function __get($key) {
return $this->registry->get($key);
}

现在体会到Registry‘共享总线’的作用了吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值