PHPCMS源码分析(五)

pc_base::creat_app()主要工作就是把application这个类初始化。

application类的初始化到底干了些什么呢,我们研究一下。

/**
 * 构造函数
 */
public function __construct() {
    $param = pc_base::load_sys_class(‘param‘);//加载param类并初始化
    define(‘ROUTE_M‘, $param->route_m());
    define(‘ROUTE_C‘, $param->route_c());
    define(‘ROUTE_A‘, $param->route_a());
    $this->init();
}

 

首先加载了param类并初始化,param类又是干什么的呢,简单说就是处理参数的。我们来看下源码。

param.class.php

//路由配置
private $route_config = ‘‘;
                                                                                      
public function __construct() {
    if(!get_magic_quotes_gpc()) {
        $_POST = new_addslashes($_POST);
        $_GET = new_addslashes($_GET);
        $_REQUEST = new_addslashes($_REQUEST);
        $_COOKIE = new_addslashes($_COOKIE);
    }
                                                                                  
    $this->route_config = pc_base::load_config(‘route‘, SITE_URL) ? pc_base::load_config(‘route‘, SITE_URL) : pc_base::load_config(‘route‘, ‘default‘);
                                                                                  
    if(isset($this->route_config[‘data‘][‘POST‘]) && is_array($this->route_config[‘data‘][‘POST‘])) {
        foreach($this->route_config[‘data‘][‘POST‘] as $_key => $_value) {
            if(!isset($_POST[$_key])) $_POST[$_key] = $_value;
        }
    }
    if(isset($this->route_config[‘data‘][‘GET‘]) && is_array($this->route_config[‘data‘][‘GET‘])) {
        foreach($this->route_config[‘data‘][‘GET‘] as $_key => $_value) {
            if(!isset($_GET[$_key])) $_GET[$_key] = $_value;
        }
    }
    if(isset($_GET[‘page‘])) $_GET[‘page‘] = max(intval($_GET[‘page‘]),1);
    return true;
}

 

首先对传过来的参数进行安全过滤。

然后获取route配置赋值给this?>routeconfigroute this->route_config的值为一个数组

array(
    ‘default‘=>array(‘m‘=>‘content‘, ‘c‘=>‘index‘, ‘a‘=>‘init‘),
);

 

所以这里就有三个默认的参数和对应的参数值。

接下来,检查route的配置文件中是否有GET和POST的默认值,如果有并且为数组,而且当传过来的参数中没有对应的参数值时,就把route中的默认参数值赋值给GET _POST。

---------------------------param.class.php结束--------------------------

下面执行到

define(‘ROUTE_M‘, $param->route_m());

define(‘ROUTE_C‘, $param->route_c());

define(‘ROUTE_A‘, $param->route_a());

 

$param->route_m()等三个方法到底干了些呢,代码如下

/**
 * 获取模型
 */
public function route_m() {
    $m = isset($_GET[‘m‘]) && !empty($_GET[‘m‘]) ? $_GET[‘m‘] : (isset($_POST[‘m‘]) && !empty($_POST[‘m‘]) ? $_POST[‘m‘] : ‘‘);
    if (empty($m)) {
        return $this->route_config[‘m‘];
    } else {
        return $m;
    }
}

 

这个方法的作用简单来说就是获取GET[m] _POST[‘m‘]的值。

总结:

写到这里也该总结一下了,前面这些代码主要做了一些准备加载 Controller的工作。主要有以下几点:

1.加载phpcms框架中的入口文件base.php。此步操作的作用是加载一些必须的配置文件和函数。

2.执行pc_base::creta_app()方法。(当然看到这里这个函数还没有执行完毕。)此函数加载了application.class.php,并且初始化该类。在该类的初始化的过程的前半部分,主要完成了对参数和默认参数的处理。

下面就是加载控制器了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。