ECMall系统请求跳转分析

ecmall是一个基于mvc模式框架系统,跟thinkphp有点像。先从ecmall的入口开始,ecmall入口文件upload/index.php、admin.php:

index.php启动ecmall前台,启动后则进入ecmall框架核心文件ecmall.php.
ecmall.php相当于一个调度中心,接收不同的控制命令(app)以及命令的相关操作(funciton),接着对其进行分配处理。然后调度中心把这些命令(app)和方法(function)
传到前台控制中心对应的具体控制器上。"控制器"接收到命令后,开始实施执行控制,接着把处理后的结果传给view模板文件(模板命名规则:appname.fucname.html)。

其中控制器接收到命令执行过程中,可以调用调度中心的模型获取方法&m()实例化一个模型,进行数据的curd操作。

index.php:





01 include(ROOT_PATH
‘/eccore/ecmall.php‘); 





02 /*
启动ECMall */
 





03 ECMall::startup(array





04     ‘default_app‘   =>  ‘default‘





05     ‘default_act‘   =>  ‘index‘





06     ‘app_root‘      => 
ROOT_PATH . 
‘/app‘





07 //加载系统所需要的基础类 





08     ‘external_libs‘ =>  array





09         ROOT_PATH
‘/includes/global.lib.php‘





10         ROOT_PATH
‘/includes/libraries/time.lib.php‘





11         ROOT_PATH
‘/includes/ecapp.base.php‘





12         ROOT_PATH
‘/includes/plugin.base.php‘





13         ROOT_PATH
‘/app/frontend.base.php‘





14     ), 





15 )); 

ecmall.php:





01 class ECMall 





02





03     /*
启动 */
 





04     function startup($config array()) 





05     





06         /*
加载初始化文件 */
 





07         require(ROOT_PATH
‘/eccore/controller/app.base.php‘);     //基础控制器类 





08         require(ROOT_PATH
‘/eccore/model/model.base.php‘);   //模型基础类 





09    





10         if (!emptyempty($config[‘external_libs‘])) 





11         





12             foreach ($config[‘external_libs‘as $lib





13             





14                 require($lib); 





15             





16         





17         /*
数据过滤 */
 





18         if (!get_magic_quotes_gpc()) 





19         





20             $_GET   =
addslashes_deep(
$_GET); 





21             $_POST  =
addslashes_deep(
$_POST); 





22             $_COOKIE=
addslashes_deep(
$_COOKIE); 





23         





24    





25         /*
请求转发 */
 





26         $default_app $config[‘default_app‘]
$config[‘default_app‘]
‘default‘





27         $default_act $config[‘default_act‘]
$config[‘default_act‘]
‘index‘





28    





29         $app    =
isset(
$_REQUEST[‘app‘])
? trim(
$_REQUEST[‘app‘])
$default_app





30         $act    =
isset(
$_REQUEST[‘act‘])
? trim(
$_REQUEST[‘act‘])
$default_act





31    





32         $app_file $config[‘app_root‘]
"/{$app}.app.php"





33         if (!is_file($app_file)) 





34         





35             exit(‘Missing
controller‘
); 





36         





37    





38         require($app_file); 





39         define(‘APP‘$app); 





40         define(‘ACT‘$act); 





41         $app_class_name =
ucfirst(
$app)
‘App‘





42    





43         /*
实例化控制器 */
 





44         $app     new $app_class_name(); 





45         c($app); 





46         $app->do_action($act);        //转发至对应的Action 





47         $app->destruct(); 





48     





49





50    





51 //根据app后面所跟的参数,来判断加载对应的控制器类文件,类文件在app文件夹下,对应名称与参数相同,act后面的参数是对应控制器中的操作方法处理请求 





52 //而对应的动作中,会有一个判断:
if
(!IS_POST){请求前的页面内容的显示}else{请求后的表单处理及处理完成后的页面跳转}。其中包括使用json处理数据 





53 //这里需要提出的是:在控制器中:  





54 $this->assign(‘order‘$order_info);      //向模板页传递所需要参数的值      





55 $this->display(‘buyer_order.confirm.html‘);//跳转到哪个页面 





56 $this->json_result($new_data‘confirm_order_successed‘);//使用json的方式传递参数,然后在页面上使用javascript处理请求的跳转

由于这个机制,ECMALL中可以自行添加APP,模块,插件等。如何在ECMALL中添加自己的APP呢?比如访问地址为http://xxx.com/index.php?app=hello

  1. 在ecmall的app目录下建立一个新的名称为hello.app.php的应用文件

  2. 在languages的sc-utf8的目录下建立对应的语言文件
    hello.lang.php ,并返回数组 (若不建立,会出错)

  3. hello.app.php中的类为HelloApp,并继承FrontendApp

  4. 此为前端程序,在ecmall的themes/mall/default文件夹下建立一个hello.index.html模板文件

  5. 重写默认的index方法,可以使用模板的方式输出:




  6. 1 $h "Hello"





    2     $this->assign("h",$h); 





    3     $this->display(‘hello.index.html‘); 

  7. 编写其他方法比如访问地址为http://xxx.com/index.php?app=hello&act=test

这个URL访问的名为hello的app类中的test方法,其实http://xxx.com/index.php?app=hello默认访问的是index方法。





01 //1、在upload/app/下建立一个test.app.php 





02 <?php 





03 class TestApp extends MallbaseApp 





04





05     public function index() 





06     





07         $str="hello
world"





08         $uc_first=
ucfirst(
$str).‘<br>‘





09         $uc_words=ucwords($str).‘<br>‘





10             





11         $Model=&m(‘goods‘); 





12         $res=$Model->get(27); 





13         print_r($res); 





14         





15         





16         $this->assign(‘ss‘,$uc_first); 





17         $this->assign(‘sss‘,$uc_words); 





18         $this->display(‘test.index.html‘);  





19     





20 }    





21 ?> 





22     





23 //2、在upload/languages/sc-utf-8/下建立一个test.lang.php 





24 <?php 





25     return array();            





26 ?> 





27     





28 // 
3、在upload/themes/mall/default/建立一个test.index.html 

admin.php这是启动ecmall后台。启动后也进入ecmall框架核心文件ecmall.php。之后的操作跟前台差不多,区别是调度中心把命令传给"后台"控制中心。但控制器调用的模型是同一个模型中心。

ECMall系统请求跳转分析,布布扣,bubuko.com

时间: 2025-01-31 07:19:44

ECMall系统请求跳转分析的相关文章

struts2请求过程源代码分析

struts2请求过程源代码分析 Struts2是Struts社区和WebWork社区的共同成果.我们甚至能够说,Struts2是WebWork的升级版.他採用的正是WebWork的核心,所以.Struts2并非一个不成熟的产品,相反.构建在WebWork基础之上的Struts2是一个执行稳定.性能优异.设计成熟的WEB框架. 我这里的struts2源代码是从官网下载的一个最新的struts-2.3.15.1-src.zip.将其解压就可以. 里面的文件夹页文件很的多,我们仅仅须要定位到stru

Android日志系统Logcat源代码简要分析

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6606957 在前面两篇文章Android日志系统驱动程序Logger源代码分析和Android应用程序框架层和系统运行库层日志系统源代码中,介绍了Android内核空间层.系统运行库层和应用程序框架层日志系统相关的源代码,其中,后一篇文章着重介绍了日志的写入操作.为了描述完整性,这篇文章着重介绍日志的读取操作,这就是我们在开发Android应用

Android 属性系统 Property service 设定分析 (转载)

转自:http://blog.csdn.net/andyhuabing/article/details/7381879 Android 属性系统 Property service 设定分析 在Window中有个注册表的东东,可以存储一些类似key:value的 键值对,而在android平台上也有类似的机制叫做属性服务(Property service)进行初始化,设置及修改和查询的功能,adb shell命令使用 setprop 及 getprop 可以看到. 问题: SurfaceFling

第一次作业:基于Orange&#39;s OS系统的进程模型分析与心得体会

1一. 操作系统进程概念模型与进程控制块概念浅析 1. 什么是进程? 图 1 - 1 (WIN10系统任务管理器对进程管理的图形化界面) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. --百度百科 应用程序的实例.对正在运行的程序的抽象. --<现代操作系统> 2. 什么是进程控制块? 进程控制块(Processing Control Block),是操作系统核心中一种数据结构,主要表示进程状态.其作用是使一个在多道程序环境下不能独立

Python的Request模块,请求跳过认证及禁用警告

最近在学python的爬虫,用到Requests模块.关于requests模块的优点,用过的人才知道!笔者用的python的版本时3.6.其他版本还未使用,请勿完全的对号入座,谢谢. 1.requests模块的官方文档:http://docs.python-requests.org/ 2.python中requests模块的安装:pip install requests  ---->若不指定版本,则默认是安装的python官方已发布的2.19.1.requests版本问题,涉及到了这篇博客的主题

实时计算,流数据处理系统简介与简单分析

转自:http://www.csdn.net/article/2014-06-12/2820196-Storm 摘要:实时计算一般都是针对海量数据进行的,一般要求为秒级.实时计算主要分为两块:数据的实时入库.数据的实时计算.今天这篇文章详细介绍了实时计算,流数据处理系统简介与简单分析. 编者按:互联网领域的实时计算一般都是针对海量数据进行的,除了像非实时计算的需求(如计算结果准确)以外,实时计算最重要的一个需求是能够实时响应计算结果,一般要求为秒级.实时计算的今天,业界都没有一个准确的定义,什么

系统监测和性能分析工具

作为一名linux运维工程师来说,对linux系统的日常管理,检测和系统性能的分析是必不可少的.也有一些针对系统监测和性能分析的工具.咱们现在就来了解一下. tcpdump命令: 网络抓包工具,过滤数据包或者定制输出格式: 常用选项: -n :  用IP地址表示主机,用数字表示端口号. -i  : 监听网卡接口, -i  any :   抓取所有网卡接口的数据包. -v  :  输出详细信息. -t :  不打印时间戳 -e :  显示以太网帧头部信息. -x  :  以十六进制数显示数据包的内

Ecmall系统自带的分页功能

在Ecmall的二次开发中,分页是必不可少的.这个系统已经自带了分页功能,下面来看看如何使用这个分页. 下面是一个自定义的类,用于查看订单的详细情况.关键在于get_order_data()这个方法,分页的使用也在这个方法的内部了.应该有的注释都有了,应该会比较容易懂,我不就多说了. <?php define('NUM_PER_PAGE', 15); // 每页显示数量 class NowaMagicApp extends MallbaseApp { public function index(

云计算之路-阿里云上:超过70秒的请求抓包分析

超过70秒的请求是通过分析IIS日志发现的: 10.159.63.104是SLB的内网IP. 通过Wireshark抓包分析请求是9:22:21收到的(tcp.stream eq 23080): 09:22:21.299838000 10.159.63.104 10.161.241.208 HTTP 291 GET /eastsea/p/3764040.html HTTP/1.0 这个请求响应内容的长度是:Content-Length 1154110(1.1MB) 云服务器(ECS)在收到请求后