Ucenter源码解析--frame.php
/control/admin/frame.php的流程结构类似于这样:/control/admin/frame.php -->调用父类adminbase的构造函数,(/model/adminbase的实例)-->adminbase类的构造函数,调用父类base类的构造函数(/model/base.php),真正干活的是base类的构造函数,所以,我们直接看base类的构造函数都实现了什么。
//构造函数
function __construct() {
$this->base();
}
//base函数
function base() {
//调用内部函数,
$this->init_var();
//初始化数据库和连接数据库信息
$this->init_db();
//引入//data/cache下面的文件,并加载全部的应用信息
$this->init_cache();
//初始化所用的应用ID
$this->init_app();
//初始化用户信息
$this->init_user();
$this->init_template();
//发送通知函数
$this->init_note();
$this->init_mail();
//$this->cron();
}
可以看到,base干的话有:
- 初始化成员变量onlineip,lang
- 建立数据库连接
- 将需要的数据表中的信息写到/data/cache对应的文件,可以说,你在/data/cache/目录下面看到的内容都是对应的表格中的数据,这样以来就可以提高代码效率。不需要重复读写数据库
- 从上一步中的/data/cache/apps.php文件中读取对应的appid内容
- 读取浏览器的cookie,使用/data/cache/apps.php文件中读取出对应appid的密钥,解密cookie,然后解出userid,username
- 设置默认主题
- 使用fsock()向各个应用发生通知
- 发生email
这个是base的构造函数的功能,adminbase类调用完父类的构造函数,就会执行页面的加载,我们可以看代码:
function adminbase() {
//调用父类的构造函数
parent::__construct();
$this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;
$sid = $this->cookie_status ? getgpc('sid', 'C') : rawurlencode(getgpc('sid', 'R'));
$this->view->sid = $sid;
$this->view->assign('sid', $this->view->sid);
$this->view->assign('iframe', getgpc('iframe'));
$a = getgpc('a');
if(getgpc('m') !='user' && $a != 'login' && $a != 'logout') {
$this->check_priv();
}
}
执行了父类的构造函数,就会执行自己的check_priv(),check_prive()的函数代码如下 :
$username = $this->sid_decode($this->view->sid);
if(empty($username)) {
header('Location: '.UC_API.'/admin.php?m=user&a=login&iframe='.getgpc('iframe', 'G').($this->cookie_status ? '' : '&sid='.$this->view->sid));
exit;
这是部分代码,所以,第一次进ucenter出现 的登陆界面,就是这个函数实现。我们看地址栏的url:http://ucenter.xadieu.com/admin.php?m=user&a=login&iframe=&sid=
是不是一样的。所以这个时候又回到了/admin.php中的代码就收到$m=user,$a=login.会自动加载对应的类。
include UC_ROOT."control/admin/$m.php";
$control = new control();
$method = 'on'.$a;
if(method_exists($control, $method) && $a{0} != '_') {
$control->$method();
可以看出这个时候/control/admin/user.php被加载进来,并实例化该类,执行onlogin()。而onlogin函数执行操作,是负责对前端的显示
该函数的最后一句代码,就是调用了这个 页面的显示:$this->view->display('admin_login');前端界面显示是这样的:
下一篇,我们把这登陆界面介绍其代码