ucenter php版本,PHP优秀系统UCenter的MVC架构

UCenter采用index.php单点入口

01.$m = getgpc('m'); //判断加载哪一个Model

02.$a = getgpc('a'); //判断加载哪一个Control

03.$release = getgpc('release');

04.if(empty($m) && empty($a)) { //如果直接访问则跳转到管理界面

05.header('Location: admin.php');

06.exit;

07.}

08.

09.//版本判断

10.if(empty($release)) {

11.define('RELEASE_ROOT', "release/20080429/");

12.} elseif(intval($release) != UC_SERVER_RELEASE) {

13.define('RELEASE_ROOT', "release/$release/");

14.} else {

15.define('RELEASE_ROOT', '');

16.}

17.//加载基类,基类中定义了很多的方法,所有控制器类都继承于该基类

18.if(file_exists(UC_ROOT.RELEASE_ROOT.'model/base.php')) {

19.require UC_ROOT.RELEASE_ROOT.'model/base.php';

20.} else {

21.require UC_ROOT.'model/base.php';

22.}

23.//判断是否加载的是指定的model

24.if(in_array($m, array('app', 'frame', 'user', 'pm', 'pm_client', 'tag', 'feed', 'friend', 'domain', 'credit', 'mail', 'version'))) {

25.if(file_exists(UC_ROOT.RELEASE_ROOT."control/$m.php")) {

26.include UC_ROOT.RELEASE_ROOT."control/$m.php";

27.} else {

28.include UC_ROOT."control/$m.php";

29.}

30.$classname = $m.'control'; //构造control类,如$m=user时control就为usercontrol

31.$control = new $classname();

32.$method = 'on'.$a; //构造方法名

33.

34.if(method_exists($control, $method) && $a{0} != '_') { //如果方法存在且不是私有方法则执行该方法

35.$data = $control->$method();

36.echo is_array($data) ? $control->serialize($data, 1) : $data;

37.exit;

38.} elseif(method_exists($control, '_call')) { //否则执行重载

39.$data = $control->_call('on'.$a, '');

40.echo is_array($data) ? $control->serialize($data, 1) : $data;

41.exit;

42.} else {

43.exit('Action not found!');

44.}

45.} else {

46.exit('Module not found!');

47.}假定我们检测用户登录,那么对应的接口址就为:

xxx/index.php?m=user&a=login

这样,就会初始化usercontrol并调用onlogin方法,看看usercontrol的onlogin()

01.//部分代码,有所删减

02.class usercontrol extends base {

03.function __construct() {

04.$this->usercontrol();

05.}

06.function usercontrol() {

07.parent::__construct(); //执行基类构造函数

08.$this->load('user'); //加载user model,base类的load方法首先从$_ENV环境变量中查找是否已设置$_ENV['user'],若未设置,则加载model/user.php,然后实例化该类并写入环境变量中,也就是此时,user model已经实例化了。

09.}

10.function onlogin() {

11.$this->init_input(); //调用基类init_input()方法

12.$isuid = $this->input('isuid'); //从基类中获取isuid

13.$username = $this->input('username'); //获取用户名

14.$password = $this->input('password'); //获取密码

15.$checkques = $this->input('checkques');  //获取是否回答提示问题

16.$questionid = $this->input('questionid'); //获取提示问题ID

17.$answer = $this->input('answer');  //获取回答

18.if($isuid) { //判断是用UID登录还是用用户名登录

19.$user = $_ENV['user']->get_user_by_uid($username); //调用/model/user.php中的get_user_by_id方法从数据库中获取该用户的实例

20.} else {

21.$user = $_ENV['user']->get_user_by_username($username);

22.}

23.

24.$passwordmd5 = preg_match('/^\w{32}$/', $password) ? $password : md5($password);

25.//判断各种可能的结果

26.if(empty($user)) {

27.$status = -1;

28.} elseif($user['password'] != md5($passwordmd5.$user['salt'])) {

29.$status = -2;

30.} elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {

31.$status = -3;

32.} else {

33.$status = $user['uid'];

34.}

35.$merge = $status != -1 && !$isuid && $_ENV['user']->check_mergeuser($username) ? 1 : 0;

36.return array($status, $user['username'], $password, $user['email'], $merge);

37.}model层直接与数据库交互,control层与model层交互,得到结果,返回给view。

如果我们要扩展自己的方法该怎么办?

首先,增加model类,定义我们所需要的方法,直接与DB进行交互。

其次,增加control类,并继承自base,定义on{xxxx}方法,与相对的model交互,并返回结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值