- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ECMall 2.X 架构分析与技术指南
ECMall 2.X 架构分析与技术指南
一、系统架构分析:
根据文件目录结构分析得到ECMall为MVC系统架构。
控制器(Controllers)分析:
在ECMall中分2种控制器,FrontendApp(前端)和BackendApp(后端),我们可以依据基础控制器创建自己的控制器。
控制器文件的命名规则:类名(首字母大写) + .app + .php;
文件位置:一般放置在相应的app目录中;
类名规则:类名+App
访问规则:/index.php?app=控制器类act=方法param=…
注意:第一个控制器,必须拥有自己的语言文件,如MallBaseApp的子类语言文件位于\languages\sc-gbk\下,而模块Module类的语言文件则位于模块的文件夹中,即使语言文件中仅有return array()的空数组。若没有相应的语言文件,程序将会报错。
现在我们试着写一个自己的控制器:
?php
/**
* 控制器演示类,此处采用单入口模式,方法与模型对应;
* 与ECMall本身的多入吕,控制器模型对应有所区别;
* @author CTO
*/
class Demo1App extends MallbaseApp{
/**
* 默认控制器方法
* @return void
*/
Function index(){
Echo __METHOD__;
}
/**
* Goods方法对应Goods模型
* @return void
*/
function goods(){
//实例化goods
$goods = m(‘goods’);
$id = empty($_GET[‘id’]) ? 0 : intval($_GET[‘id’]);
if(!$id){
echo “Warning! Hacking!”;
return;
}
//获取goods信息
$goods_info = $goods-get_info($id);
//输出goods信息
$result = print_r($goods_info);
}
//此处的test自定义模型将在下面讲述,暂时略过;
function test(){
$test = m(‘test’);
$data = array(‘name’=’建航’,”name2”=”科技”);//name,name2对应表字段
$test-addData($data);
}
}
测试访问:/index.php?app=demo1goodsid=3
模型(Model)分析:
ECMall模型分为业务模型与普通模型,二者皆继承自核心类的BaseModel模型;
模型、插件的继承关系
模型:可以理解为数据实体类,对应数据库表字段,一个实体表示一张表,每个实例为一行记录。ECMall的大部分模型与表有对应关系,仅业务模型没有表联系(操作业务如CRUD)。
创建自己的模型:
模型文件的命名规则:类名(首字母大写)+.model+.php;
文件位置:一般放置在相应的/includes/models目录中;
类名规则:类名+Model
调用规则:可能选用控制器对应模型的多入口方式 ,也可以选用控制器对应模型的单入口方式。
首先建立一张表Test(id,name,name2);
编写test.model.php,代码如下:
?php
class TestModel extends BaseModel{
/**
* $table为表映射,$prikey为映射表的主键,$alias为表查询时的别名,主要体现在SQL语句里,$_name为模型的名称,这四个值都与ECMall模型数据库操作(很独到的一种操作方式,非通用的Adodb+SQL的方式)有关,如果不想用SQL语句查询的话,而是使用模型自身提供的数据操作功能,那么至少要把$table,$prikey体现出来;至于$alias与$_name的存在与否并不重要。只有类似于我们需要得到模型名称时,才会将$_name进行实现,例如:function getName(){return $this-_name;}。
*/
/**
* 增加数据演示
* @author kichijyo;
* @return void
*/
function addData($data){
$this-add($data);//该处的add()继承自BaseModel类
}
}
测试访问:/index.php?app=demo1act=test
下面我们试着建一对主、从表的模型关系:
首先我们建2张表,一个是ecm_test从来(id,stu_id相对于ecm_test2表的外键,name),另一个为ecm_test2主表(stu_id相对于ecm_test2的主
文档评论(0)