四、session、cookie实战之登录功能mvc结构

该项目文件结构简单,根据MVC设计思想,使用函数式编程,未使用类和面向对象编程,简化框架结构,轻量展示MVC编程结构。使用原生php,实现注册、登录和笔记列表展示,可以加深session cookie工作原理的理解。

项目源码:https://github.com/onerole1024/functionmvc.git

四、session、cookie实战之登录功能mvc结构_第1张图片
mvc.jpg

index.php 是入口文件

引入使用mvc结构的函数和工具【公共】函数,并接收参入的参数c和a代表请求的控制器和动作方法,然后调用make函数调用控制器下的某个控制器中的某个方法处理这次请求。

$e));
}




?>

controls文件夹包含了所有控制器,welcome.php是默认控制器,该控制器只有一个index方法,只设置了下页面title,然后调用show方法,渲染views目录下的视图。


views文件夹里面都是视图文件,文件夹的命名为控制器的名称,方便管理。如何将控制器中的变量渲染到视图文件使用了一个函数extract($data);以下是welcome.php控制器中index方法渲染的视图文件index.php

欢迎来学习这个小小记事本项目,之后才可以查看自己的记事本
已有账户,查看

视图的头部和脚部都不在每个视图文件中,而在layout文件夹中,只要一前一后include 进来就可以实现将每个页面公共一样的部分提取出来,方便管理。

welcome.php控制器中没什么逻辑处理,但像user.php或者article.php控制器,需要对数据库进行操作,我们借助models文件夹下的相应model来实现具体数据库操作。例如article.php,我们使用mvc.php文件中的data方法实现db.php数据库连接函数文件引入和models下相应model文件引入。

function data($model){
    require_once ('db.php');
    $url = './models/'.$model.'.php';
    if (file_exists($url)) {
        include ($url);
    }else{
        throw new Exception('找不到该模型',404);
    }

}
query("select * from article where uid=".$uid);
  if (!$result) {
    return false;
  }

  $articles = array();
  while ($row = $result->fetch_assoc()) {
    $articles[] =$row;
  }
  $conn->close();
  return $articles;

}

?>

采用try catch 捕获异常,错误手动抛出异常【 throw new Exception('连接不上数据库');】,在入口文件中进行异常捕获,渲染错误页面,列出错误信息

try{
  make($control,$action);
}catch(Exception $e){
  make('error','index',array('except'=>$e));
}


错误码:getCode();?>
错误信息:getMessage();?>
错误文件:getFile();?>
错误行:getLine();?>

这个mvc登录小项目包含的数据库结构如下

create database login DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use login;

create table user  (
  `uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(16) NOT NULL,
  `password` char(60) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';

create table article  (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL,
  `content` text DEFAULT NULL,
  `createtime` int(11) DEFAULT NULL,
  `updatetime` int(11) DEFAULT NULL,
  `uid` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='文章表';


-- 创建名为freeuser的用户,%表示可以远程操作,ip不限。
CREATE USER 'freeuser'@'%' IDENTIFIED BY 'free99';
-- 分配login库的所有权限给freeuser用户
GRANT ALL PRIVILEGES ON login.* TO 'freeuser'@'%';

你可能感兴趣的:(四、session、cookie实战之登录功能mvc结构)