有关ecmall的东东1----系统请求跳转分析

几个月都没有写blog了,最近研究了一下ecmall的源码,用来学习php,感觉还不错,但想体会里面的思想的精华,还需要再对它进行详细的分析了!
所以计划在这里,对ecmall使用模块分解分析的方法,对它进行仔细的分析,以体会里面的整个php的系统架构,各模块的设计方式。
在这之前,我觉得需要有必要让大家了解ecmall的程序的大致结构,如图所示:

有关ecmall的东东1----系统请求跳转分析

根据ecmall的程序结构图,你可以清楚的知道ecmall的五脏六腑! 

 然后,根据我的学习,觉得其中一些值得我学习的地方,一一提取出来,对它进行分析,与理解。做如下几个问题的处理:

需要分析的问题:

1、系统请求跳转分析
2、数据库关系模型的实现
3、登录用户信息$this->visitor->get("user_id")的实现
4、模板解析分析
5、页面json对象传输实现
6、缓存分析

这里需要提出的是:笔者也是在慢慢的学习它,难免会有不对之处,欢迎大侠们拍转,提出宝贵的意见!谢谢

 

1、系统请求跳转分析:

对于这个问题,我们要首先看看下面的这段代码:

 

index.php:

include(ROOT_PATH . '/eccore/ecmall.php');
/* 启动ECMall */
ECMall::startup(array(
    'default_app'   =>  'default',
    'default_act'   =>  'index',
    'app_root'      =>  ROOT_PATH . '/app',
//加载系统所需要的基础类
    'external_libs' =>  array(
        ROOT_PATH . '/includes/global.lib.php',
        ROOT_PATH . '/includes/libraries/time.lib.php',
        ROOT_PATH . '/includes/ecapp.base.php',
        ROOT_PATH . '/includes/plugin.base.php',
        ROOT_PATH . '/app/frontend.base.php',
    ),
));


ecmall.php

class ECMall
{
    /* 启动 */
    function startup($config = array())
    {
        /* 加载初始化文件 */
        require(ROOT_PATH . '/eccore/controller/app.base.php');     //基础控制器类
        require(ROOT_PATH . '/eccore/model/model.base.php');   //模型基础类

        if (!empty($config['external_libs']))
        {
            foreach ($config['external_libs'] as $lib)
            {
                require($lib);
            }
        }
        /* 数据过滤 */
        if (!get_magic_quotes_gpc())
        {
            $_GET   = addslashes_deep($_GET);
            $_POST  = addslashes_deep($_POST);
            $_COOKIE= addslashes_deep($_COOKIE);
        }

        /* 请求转发 */
        $default_app = $config['default_app'] ? $config['default_app'] : 'default';
        $default_act = $config['default_act'] ? $config['default_act'] : 'index';

        $app    = isset($_REQUEST['app']) ? trim($_REQUEST['app']) : $default_app;
        $act    = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : $default_act;

        $app_file = $config['app_root'] . "/{$app}.app.php";
        if (!is_file($app_file))
        {
            exit('Missing controller');
        }

        require($app_file);
        define('APP', $app);
        define('ACT', $act);
        $app_class_name = ucfirst($app) . 'App';

        /* 实例化控制器 */
        $app     = new $app_class_name();
        c($app);
        $app->do_action($act);        //转发至对应的Action
        $app->destruct();
    }
}

//根据app后面所跟的参数,来判断加载对应的控制器类文件,类文件在app文件夹下,对应名称与参数相同,act后面的参数是对应控制器中的操作方法处理请求
//而对应的动作中,会有一个判断: if (!IS_POST){请求前的页面内容的显示}else{请求后的表单处理及处理完成后的页面跳转}。其中包括使用json处理数据
//这里需要提出的是:在控制器中: 
$this->assign('order', $order_info);      //向模板页传递所需要参数的值     
$this->display('buyer_order.confirm.html');//跳转到哪个页面
$this->json_result($new_data, 'confirm_order_successed');//使用json的方式传递参数,然后在页面上使用javascript处理请求的跳转

 

 

 

你可能感兴趣的:(JavaScript,数据结构,PHP,json,Blog)