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');前端界面显示是这样的:

 

下一篇,我们把这登陆界面介绍其代码

posted @ 2015-02-12 18:11  月上海棠  阅读(528)  评论(0编辑  收藏  举报