下面贴了一张MVC工作原理图,此图介绍了MVC的含义及其工作过流的走向
一、在分析其工作代码的原理前,我们这边准备了一下准备工作
1)warmp64下的www文件下任意建一个MVC文件夹,之前有一篇介绍Smarty内容提到的libs库复制一份放进MVC文件夹中
(链接:https://mp.csdn.net/postedit/79779952),然后文件夹内再建一个Config、Controller、Model、View文件夹目录,然后在Contoller文件夹下建UserController.php、IndexController.php、GoodsController.php文件;在View目录下也对应控制器建对应的文件夹User、Index、Goods,View这里就不再多说是放模板文件的;Model文件夹下放入写好的model.class.php类文件;Config下放入连接数据库的配置文件config.php;目录如下图:
2)config.php代码如下,自己将其建好并将其mysql数据库也建立好
//连接数据库的配置文件
define('HOST','自定义');
define('USER','root');
define('PASSWORD','自定义');
define('DB_NAME','自定义');
define('CHARSET','utf8');
3)准备好之前封装好的model.class.php类文件,这里暂时不分享,有点小乱,后续整理后再发布
二、正式进入
1)首先打开之前建好的入口文件index.php文件
通过get的方法接收控制器和方法===>index.php?c=users&a=add;
// 0、引入config配置信息
include "./Config/config.php";
// 引入model类
include "./Model/model.class.php";
//1、 此处的判断是为了避免没输入c和a时页面报错,默认显示index页面
$c = isset($_GET["c"]) ? $_GET["c"] :'Index' ;//$_GET["c"] ?? 'Index';
$a = isset($_GET["a"]) ? $_GET["a"] :'index' ;//$_GET["a"] ?? 'Index';
// 2-1、引入控制器类文件
//include "./Controller/".$c."Controller.class.php";
// 2-2、引入控制器类文件,2-2方法更加严谨所以淘汰2-1方法,固用此法
// 自动加载函数
/*自动加载函数:当我们实例化或继承一个不存在的类的对象的时候会被自己调用,即需要传入一个变量$className当调用这个函数时,发现后面有实例化但确没有引入此实例化的类文件时,会自动加载下面这个函数,同时会生成和实例化名字一样的变量,添加到下面的调用文件的类名*/
/*因为一般文件libs里面会有很多库函数,然后库文件的名字应该类的名字是一样的,所以要在前面再加一个路径*/
function __autoload($className){
// 判断smarty或者是其他名字的类是否存在,如果存在,就引入对应的类文件
if(file_exists("./Libs/".$className."/".$className.".class.php")){
include "./Libs/".$className."/".$className.".class.php";
}elseif(file_exists("./Controller/".$className.".class.php")){
include "./Controller/".$className.".class.php";
}
}
//3、 实例化控制器类
$controller =$c."Controller";
$obj = new $controller();
// 4、调用控制器类的方法
$obj->$a();
UserController.class.php=======================================
2)因为第一步输入的是c=users&a=add;所以会调到UserController.class.php下的add方法
注释1、此页面所有引入的文件都是以index为准来引入的,因为是index入口文件调用了这个控制器,即在输出的网页名后面加入然后调出add.html页面,此时add.html也是在index.php文件上
注释2、为了方便起见将此页面内的// include "./Config/config.php";include "./Model/model.class.php";全部移动东index.php入口文件内,因为是在同一界面上加载的
注释3、此页面中解析的模板add.html、edit.html均是在View目录下的新建的user目录下建的模板文件,此处可根据自己的需求创建模板文件
注释4、所以注释掉的代码均是由繁道简的过程演变,注释很详细,耐心看一下即可,就不多加赘述
class UsersController extends Smarty
{
// 构造方法来简化实例化的那几个初级步骤
public function __construct(){
// 调用一下父类的构造方法,避免和下面的构造方法冲
parent::__construct();
/*因为上面继承了父级的所以此处就不需要再实例化*/
// 2、实例化smarty类
// $this->s = new Smarty();
// 3、初始化smarty
$this->template_dir="./View";
$this->compile_dir="./View_c";
}
// 展示用户列表的方法
public function index(){
// 1、引入Smarty类
// include "./Libs/Smarty.class.php";
// 2、实例化smarty类
// $s = new Smarty();
// // 3、初始化smarty
// $s->template_dir="./View";
// $s->compile_dir="./View_c";
// 4、引入model所需要的配置文件
// include "./Config/config.php";
// 5、引入model类
// include "./Model/Model.class.php";
// 6、实例化model类
$users = new Model('users');
// 7、查询users表的所有信息
$res = $users ->select();
// var_dump($res);
// 4、分配变量
$this->assign('res',$res);
// 5、解析模板
$this->display("Users/index.html");
}
// 加载添加用户表单的方法
public function add(){
// echo "展示用户的表单";
// 1、引入Smarty类
// include "./Libs/Smarty.class.php";
// 2、实例化smarty类
// $s = new Smarty();
// // 3、初始化smarty
// $s->template_dir="./View";
// $s->compile_dir="./View_c";
// 4、分配变量
// 5、解析模板
$this->display("Users/add.html");//因为上边已经指定是在view目录下所以只需要加users这个路径名即可
}
// 执行用户添加的方法
public function insert(){
// 将用户信息添加到数据库当中
// 0、引入model所需要的配置文件
// include "./Config/config.php";
// 1、引入model类
// include "./Model/Model.class.php";
// 2、将爱好信息拼接成字符串
$_POST['hobby'] = implode(",", $_POST['hobby']);
// 3、实例化model类
$users = new Model('users');
// 4、将用户信息进行添加
$res = $users->add($_POST);
// var_dump($res);
// 5、判断是否成功
if($res){
$this->success("恭喜添加成功","./index.php?c=users&a=index",3);
}else{
$this->error("抱歉,添加失败",$_SERVER['HTTP_REFERER'],3);
}
}
// 执行用户删除的方法
public function delete(){
// 引入config配置信息
// include "./Config/config.php";
// 引入model类
// include "./Model/model.class.php";
// 获取要删除的id
$id = $_GET["id"];
// 实例化model类,users是数据库建立的表格名称
$users = new Model("users");
// 执行删除
$res = $users ->del($id);
// 判断是否删除成功
if($res){
$this->success("恭喜删除成功","./index.php?c=users&a=index",3);
}else{
$this->error("抱歉,删除失败",$_SERVER['HTTP_REFERER'],3);
}
}
// 加载修改用户表单的方法
public function edit(){
// 1、引入Smarty类
// include "./Libs/Smarty.class.php";
// 2、实例化smarty类
// $s = new Smarty();
// // 3、初始化smarty
// $s->template_dir="./View";
// $s->compile_dir="./View_c";
// 4、引入config配置信息
// include "./Config/config.php";
// 5、引入model类
// include "./Model/model.class.php";
// 7、实例化model类,users是数据库建立的表格名称
$users = new Model("users");
// 8、获取要修改的id
$id = $_GET["id"];
// 9、执行修改
$res = $users ->find($id);
// 10、分配变量
$this->assign("res",$res);
// 11、解析模板
$this->display("Users/edit.html");
}
// 执行用户修改的方法
public function update(){
// 8、获取要修改的id
$id = $_GET["id"];
$_POST["hobby"]=implode(",", $_POST["hobby"]);
// // 4、引入config配置信息
// include "./Config/config.php";
// 5、引入model类
// include "./Model/model.class.php";
// 7、实例化model类,users是数据库建立的表格名称
$users = new Model("users");
// 9、执行修改
$res = $users ->save($_POST,$id);
// 判断是否删除成功
if($res){
$this->success("恭喜修改成功","./index.php?c=users&a=index",3);
}else{
$this->error("抱歉,修改失败",$_SERVER['HTTP_REFERER'],3);
}
}
/*成功函数*/
public function success($info,$link,$seconds){
// 引入smarty类
// include "./Libs/Smarty.class.php";
// // 实例化smarty函数
// $s = new Smarty();
// // // 初始化参数
// $s->template_dir = "./View";
// $s->compile_dir = "./View_c";
// // 分配变量
$this->assign("info",$info);
$this->assign("link",$link);
$this->assign("seconds",$seconds);
// // 解析模板
$this->display("./success.html");
}
// 失败函数
public function error($info,$link,$seconds){
// 引入smarty类
// include "./Libs/Smarty.class.php";
// // 实例化smarty函数
// $s = new Smarty();
// // // 初始化参数
// $s->template_dir = "./View";
// $s->compile_dir = "./View_c";
// // 分配变量
$this->assign("info",$info);
$this->assign("link",$link);
$this->assign("seconds",$seconds);
// // 解析模板
$this->display("./error.html");
}
}